无法投射类型' UINavigationController'

时间:2015-05-13 08:32:06

标签: xcode swift

我正在为我的应用程序实现一个搜索界面,所以基本上我会将搜索关键字从一个ViewController传递给另一个ViewController。

我已经做过几次这种类型的参数传递,但这次看起来很奇怪。目标ViewController嵌入在导航控制器中。

现在代码看起来像这样。

1.9.2

我已经探讨了这些问题 DestinationViewController Segue and UINavigationController swiftHow do I segue values when my ViewController is embedded in an UINavigationController?没有运气。

让我想知道的是,我已经在导航控制器中嵌入了ViewControllers,我可以通过segueing传递参数。但是,在这种情况下,它会抛出无法转换类型' UINavigationController' 错误的值。如果我尝试上面的注释代码,它不会在那里抛出错误,但是在 AppDelegate 类。

3 个答案:

答案 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;