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

如何将变量传递给嵌入在Navigation Controller中的ViewController?

问题根源

你当前的写法存在两个核心错误,导致赋值不生效:

  • ViewController2()是手动初始化了一个全新的ViewController2实例,和你通过segue跳转的导航控制器容器内的ViewController2实例完全独立,赋值不会作用到跳转后的目标页面
  • 你的segue的目标是UINavigationController,不是直接关联ViewController2,不能直接初始化ViewController2赋值

推荐实现方案

在ViewController1中重写prepare(for:sender:)方法,通过segue链路拿到跳转的目标实例再赋值,示例代码如下:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // 匹配你自己在Storyboard/Xib中给segue设置的唯一标识
    guard segue.identifier == "跳转至ViewController2所在导航页的segueID" else { return }
    // 第一步:拿到segue的目标导航控制器
    guard let targetNav = segue.destination as? UINavigationController else { return }
    // 第二步:从导航控制器栈中取出你需要的ViewController2实例
    guard let vc2 = targetNav.topViewController as? ViewController2 else { return }
    // 第三步:给目标实例赋值
    vc2.testID = "test value"
}

注意事项

  • 你需要提前在Storyboard中选中你从ViewController1到导航控制器的segue,给它设置唯一的identifier,和代码中判断的字符串保持一致
  • 如果你需要给Segmented Control管理的3个不同子控制器传值,只需要在拿到导航控制器实例后,根据你自己的子控制器管理逻辑,取出对应索引的子控制器实例赋值即可,核心逻辑和上述示例一致

内容的提问来源于stack exchange,提问作者amirbt17

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:27:04