Swift:UITableViewCell present弹窗控制器时传值失败如何解决
问题成因
传值失效是因为你在代码中创建了两个完全独立的PopUpVC实例:
- 你手动调用
PopUpVC()初始化的第一个实例,确实被赋值了pw和reviewDoc属性,但这个实例全程没有被展示,赋值完成后就被系统回收了,没有任何实际作用。 - 你通过Storyboard的
instantiateViewController(withIdentifier:)方法初始化的alertPopUpVC,才是最终被present到页面上、用户能看到的弹窗实例。你没有给这个实例的自定义属性传值,它的pw和reviewDoc就保持着定义时的初始空字符串状态,所以viewDidLoad里打印出来的结果是空的。
额外注意:用PopUpVC()这种纯代码初始化方式加载Storyboard中搭建的控制器,不会加载Storyboard里拖拽的UI元素,就算你强行present这个实例,弹窗界面也会是空白的。
解决方法
删除冗余的手动初始化PopUpVC的代码,给从Storyboard中实例化出的、实际要展示的控制器对象传值即可,修改后的removeReview方法代码如下:
@IBAction func removeReview(_ sender: Any) { print("ReviewItem - removeReview function called") print("Passwords: \(passwords)") print("Review_number: \(reviewNum)") let storyboard = UIStoryboard(name: "PopUp", bundle: nil) // 实例化Storyboard中的控制器后强转为自定义的PopUpVC类型 guard let alertPopUpVC = storyboard.instantiateViewController(withIdentifier: "VerifyPasswords") as? PopUpVC else { return } // 给要展示的弹窗实例传值 alertPopUpVC.pw = self.passwords alertPopUpVC.reviewDoc = self.reviewNum alertPopUpVC.modalPresentationStyle = .overCurrentContext alertPopUpVC.modalTransitionStyle = .crossDissolve viewController?.present(alertPopUpVC, animated: true, completion: nil) }
修改后运行,弹窗viewDidLoad中就能正常打印出传入的密码和review编号值了。
内容的提问来源于stack exchange,提问作者ljs0626jh
相关产品推荐
相关产品推荐

