You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:48:26