首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用导航控制器在“`prepareForSegue`”中设置数据

用导航控制器在“`prepareForSegue`”中设置数据
EN

Stack Overflow用户
提问于 2015-02-28 23:55:03
回答 7查看 47.5K关注 0票数 75

我正在用Swift开发一个iOS应用程序。

我希望使用prepareForSegue函数从视图向另一个视图发送数据。

但是,我的目标视图前面有一个导航控制器,所以它不能工作。如何设置导航控制器中包含的VC上的数据?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-02-28 23:59:01

prepareForSegue中,访问目标导航控制器,然后访问其顶部:

代码语言:javascript
运行
复制
let destinationNavigationController = segue.destination as! UINavigationController
let targetController = destinationNavigationController.topViewController

从目标控制器,您可以访问它的视图和传递数据。

在旧版本(现已过时)中,Swift和UIKit的代码略有不同:

代码语言:javascript
运行
复制
let destinationNavigationController = segue.destinationViewController as UINavigationController
let targetController = destinationNavigationController.topViewController
票数 140
EN

Stack Overflow用户

发布于 2015-08-06 13:40:42

  1. 在SendViewController中做好准备 重写函数准备(用于segue: UIStoryboardSegue,发件人: Any?) { if segue.identifier == "segueShowNavigation“{ if let destVC = segue.destination as?UINavigationController,让targetController = destVC.topViewController as?ReceiveViewController { targetController.data = "hello from ReceiveVC !“}}
  2. 将标识符segue编辑为"showNavigationController“

  1. 在您的ReceiveViewController添加

代码语言:javascript
运行
复制
var data : String = ""

override func viewDidLoad() {
    super.viewDidLoad()
    print("data from ReceiveViewController is \(data)")
}

当然,您可以发送任何其他类型的数据(int、Bool、JSON .)

票数 31
EN

Stack Overflow用户

发布于 2017-01-16 15:30:49

使用optional binding和Swift 3&4完成答案:

代码语言:javascript
运行
复制
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let navigationVC = segue.destination as? UINavigationController, let myViewController = navigationVC.topViewController as? MyViewControllerClass {
        myViewController.yourProperty = myProperty
    }
}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28788416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档