[英]Swift 4: prepare(for segue:) being called after viewDidLoad
我有2个VC: CouponVC和CouponFeedbackVC 。
优惠券VC收到品牌:品牌! 来自其parentViewController。 现在我想将brand.name传递给CouponFeedbackVC 。
CouponVC.swift
var brandName: String!
override func viewDidLoad() {
super.viewDidLoad
brandName = brand.name
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "couponToFeedBack" {
if let vc = segue.destination as? CouponFeedbackVC {
print(brandName)
vc.brandName = self.brandName
}
}
}
在CouponFeedbackVC.swift中
var brandName: String!
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad")
print(brandName)
}
override func awakeFromNib() {
print(brandName)
self.view.layoutIfNeeded()
}
控制台日志
nil
viewDidLoad
nil
StayUncle
awakeFromNib() - > viewDidLoad() - > prepare(for segue :)
我没有从CouponFeedbackVC访问任何商店。
为什么在viewDidLoad()和awakeFromNib()之后调用(for segue :) ?
在awakeFromNib
您引用self.view
以调用layoutIfNeeded
。 这会导致加载视图并调用viewDidLoad
。
如果从awakeFromNib
删除对self.view.layoutIfNeeded
的调用,则在prepare(for:sender:)
之后才会调用viewDidLoad
。 没有理由在awakeFromNib
调用layoutIfNeeded
。
在准备之前调用viewDidLoad()和awakeFromNib() (对于segue :)因为要将数据从一个视图控制器传递到另一个视图控制器,你必须初始化并分配对象所以当调用awakeFromNib时,它保证具有所有的出口和动作连接已经建立,并且调用viewDidLoad ,这使得视图控制器已将其视图层次结构加载到内存中。 现在它准备好将数据从一个viewcontroller传递到另一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.