以编程方式在swift中显示现有视图控制器

时间:2016-04-15 15:46:52

标签: ios swift uiviewcontroller

我在一个导航控制器中嵌入了几个视图控制器。 如何从vc进一步向下显示较早的vc。 这就是我的尝试:

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("MenuViewController") as! MenuViewController
        self.presentViewController(vc, animated: true, completion: nil)

这不起作用并返回以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

enter image description here

3 个答案:

答案 0 :(得分:0)

假设您已正确拼写“MenuViewController”,可能是您未将故事板标识符正确添加到视图控制器。

转到故事板并单击相关的视图控制器,单击Identity Inspector并在Storyboard ID框中输入“MenuViewController”。

此外,将您的代码更改为Andrew's以获得最佳实践。

答案 1 :(得分:0)

我不太确定你要用上面的代码实现什么,但如果你想回到上一个视图控制器,你应该使用一个委托来告诉VC呈现它已完成它的工作然后呈现视图控制器应使用导航控制器将其关闭。视图控制器应该避免解雇自己,因为他们不知道它们是如何被呈现的,它应该总是(至少99%的时间)是主持人,因为它知道如何呈现它。

考虑到这一点,您可以使用以下方法解除导航控制器中的VC

self.navigationController?.popViewControllerAnimated(true)

self.navigationController?.popToViewController(<#MyViewController Reference#>, animated: true)

答案 2 :(得分:-1)

始终避免强行打开!!

if let storyboard = self.storyboard{
    if let vc = storyboard.instantiateViewControllerWithIdentifier("MenuViewController") as? MenuViewController {
     self.presentViewController(vc, animated: true, completion: nil)
    }

}

这将阻止应用程序崩溃,但不会阻止问题的整个解决方案。 MenuViewController标识符错误或故事板为零。