关闭 UINavigationController 并呈现另一个 UINavigationController
Posted
技术标签:
【中文标题】关闭 UINavigationController 并呈现另一个 UINavigationController【英文标题】:Dismissing a UINavigationController and Presenting another UINavigationController 【发布时间】:2016-01-02 20:59:17 【问题描述】:我有两个视图控制器,ViewControllerA
和 ViewControllerB
,嵌入在 UINavigationController
中。 ViewControllerA
有一个 UICollectionView
可以显示图像。
当位于索引 0 和 UICollectionViewCell
的相机图标被选中时,它应该关闭 ViewControllerA
并显示 ViewControllerB
。此外,还有一个ViewController
以模态方式呈现ViewControllerA
这就是我所做的,但它只会关闭 ViewControllerA
并且没有任何反应
let controller = self.storyboard?.instantiateViewControllerWithIdentifier("cameraViewController") as! UINavigationController
self.dismissViewControllerAnimated(true, completion: () -> Void in
self.presentingViewController?.presentViewController(controller, animated: true, completion: nil)
)
【问题讨论】:
presentingViewController
为零吗?
它没有抛出任何错误。我通过添加断点来调试它。它运行了代码,只是没有对它做出反应
***.com/questions/19857274/…
如果它是nil,它不会抛出错误,因为你使用self.presentingViewController?
而不是self.presentingViewController!
,如果它是nil,那很可能是问题的原因 - 试试打印self.presentingViewController
,看看结果如何。
【参考方案1】:
当视图控制器被关闭时,我的猜测是self
已经被释放,所以self.presentingViewController?
也变成了nil
。我会在取消操作发生之前创建一个对呈现视图控制器的强引用:
let presentingViewController = self.presentingViewController
self.dismissViewControllerAnimated(true) completed in
if completed
presentingViewController?.presentViewController(controller, animated: true, completion: nil)
另外,首先确保self.presentingViewController
不是nil
。
【讨论】:
在某处看到了这个。但是,忽略了它,这将是问题的原因。谢谢。【参考方案2】:没有发生任何事情的原因是因为self.presentingViewController?
为零。
如果您使用的是self.presentingViewController!
,则会出现错误提示在展开可选值时意外发现 nil,应始终避免这种情况。
使用self.presentingViewController?
而不是self.presentingViewController!
是正确的,因为它更安全,但要解决此问题,您必须确保self.presentingViewController?
不为零。
let presenting = self.presentingViewController
self.dismissViewControllerAnimated(true, completion: () -> Void in
presenting?.presentViewController(controller, animated: true, completion: nil)
)
【讨论】:
以上是关于关闭 UINavigationController 并呈现另一个 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章
如何正确关闭作为模式呈现的 UINavigationController?
使用 UINavigationController 关闭 UIPopoverController
UINavigationController 后退和关闭按钮
使用平移关闭 UINavigationController 调整 UINavigationBar 相对于顶部安全区域的大小