我有一个嵌入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)
})
答案 0 :(得分:2)
当视图控制器被解除时,我的猜测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
。
答案 1 :(得分:0)
没有发生任何事情的原因是因为self.presentingViewController?
是零。
如果您使用的是self.presentingViewController!
,那么在解开可选值时会出现错误,指出意外发现nil,应始终避免这种情况。
使用self.presentingViewController?
代替self.presentingViewController!
是正确的,因为它更安全,但为了解决这个问题,您必须确保self.presentingViewController?
不是nil。
let presenting = self.presentingViewController
self.dismissViewControllerAnimated(true, completion: {() -> Void in
presenting?.presentViewController(controller, animated: true, completion: nil)
})