目标视图控制器转场和 UINavigationController 的 Swift 实现

29

所以我有一个像这样的prepareForSegue方法:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "fromEventTableToAddEvent" {

        let addEventViewController: AddEventViewController = segue.destinationViewController as! AddEventViewController

        addEventViewController.newTagArray = newTagArray

    }
}

然而,在运行时,应用程序崩溃并记录输出此消息:

无法将类型为“UINavigationController”的值转换为目标类型

该错误是由于addEventController嵌入了一个导航控制器而引起的,但我不确定如何设置segue,以便将destinationViewController设置为NavigationController,同时还允许我在prepareForSegue方法中传递变量给addEventController。

那么,我该如何使用Swift进行此操作?

非常感谢您提供的帮助和时间,这对我非常有帮助。

2个回答

109

你只需要访问导航控制器的topViewController,它将是AddEventViewController。以下是代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "fromEventTableToAddEvent" {

        let nav = segue.destinationViewController as! UINavigationController
        let addEventViewController = nav.topViewController as! AddEventViewController

        addEventViewController.newTagArray = newTagArray

    }
}

1
谢谢!简单易懂。 - Ryan Walton
1
@reggie Swift 3基本上是一样的。let nav = segue.destination as! UINavigationController let topicVC = nav.topViewController as! TopicsViewController - JP Aquino

0
需要明确的是,只需创建一个segue.destination类的对象并将其向下转换为所需的ViewController即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接