我有 2 个 VC:CouponVC 和 CouponFeedbackVC。
Coupon VC 从它的 parentViewController 接收 brand: Brand!。 现在我想将 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 的任何 channel 。
为什么 prepare(for segue: ) 在 viewDidLoad() 和 awakeFromNib() 之后被调用?
最佳答案
在 awakeFromNib
中,您正在引用 self.view
以调用 layoutIfNeeded
。这会导致加载 View 并调用 viewDidLoad
。
如果您从 awakeFromNib
中删除对 self.view.layoutIfNeeded
的调用,则 viewDidLoad
在 prepare(对于:发件人:)
。没有理由在 awakeFromNib
中调用 layoutIfNeeded
。
关于ios - swift 4 : prepare(for segue:) being called after viewDidLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46617760/