我正在为我的应用程序实现一个搜索界面,所以基本上我会将搜索关键字从一个ViewController传递给另一个ViewController。
我已经做过几次这种类型的参数传递,但这次看起来很奇怪。目标ViewController嵌入在导航控制器中。
现在代码看起来像这样。
1.9.2
我已经探讨了这些问题 DestinationViewController Segue and UINavigationController swift,How do I segue values when my ViewController is embedded in an UINavigationController?没有运气。
让我想知道的是,我已经在导航控制器中嵌入了ViewControllers,我可以通过segueing传递参数。但是,在这种情况下,它会抛出无法转换类型' UINavigationController' 错误的值。如果我尝试上面的注释代码,它不会在那里抛出错误,但是在 AppDelegate 类。
答案 0 :(得分:44)
回答我自己的问题。在这种情况下,我们需要通过执行以下操作来访问子视图:
let nav = segue?.destinationViewController as! UINavigationController
let svc = nav.topViewController as! SearchViewController
svc.toPassSearchKeyword = searchKeyword;
答案 1 :(得分:3)
根据Semih的回答,如果您不想使用标识符,也可以将变量传递给下一个segue:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let nav = segue.destination as? UINavigationController,
let vc = nav.topViewController as? TestViewController {
vc.username = "Test"
}
}
答案 2 :(得分:0)
对于那些正在研究此问题的人来说,它只是一个简短的说明,已被重命名为Destination
let nav = segue.destination as! UINavigationController
let svc = nav.topViewController as! SearchViewController
svc.toPassSearchKeyword = searchKeyword;