我有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() - >准备(对于segue:)
我没有从CouponFeedbackVC访问任何商店。
为什么在 viewDidLoad()和 awakeFromNib()之后调用准备(for segue:)?
答案 0 :(得分:5)
在awakeFromNib
self.view
您引用layoutIfNeeded
以致电viewDidLoad
。这会导致加载视图并调用self.view.layoutIfNeeded
。
如果您从awakeFromNib
移除对viewDidLoad
的来电,则prepare(for:sender:)
之后才会调用layoutIfNeeded
。没有理由在awakeFromNib
中致电adapter.setListener(new CaptionedImagesAdapter.Listener() {
@Override
public void onClick(int position) {
Intent intent = new Intent(getActivity(), SaladDetailActivity.class);
intent.putExtra(SaladDetailActivity.EXTRA_SALAD, position+1);
getActivity().startActivity(intent);
}
});
。
答案 1 :(得分:0)
viewDidLoad()和awakeFromNib(),因为要将数据从一个视图控制器传递到另一个视图控制器,您必须初始化并分配对象因此,当调用 awakeFromNib 时,保证已经建立了所有的插座和操作连接,并且调用了 viewDidLoad ,这确保了视图控制器已加载其视图层次结构进入记忆。现在它已准备好将数据从一个viewcontroller传递到另一个viewcontroller。