解散UINavigationController并呈现另一个UINavigationController

时间:2016-01-02 20:59:17

标签: ios swift uinavigationcontroller

我有一个嵌入ViewControllerA的两个视图控制器ViewControllerBUINavigationControllerViewControllerA有一个显示图片的UICollectionView

当选择位于索引0和UICollectionViewCell的相机图标时,应取消ViewControllerA并显示ViewControllerB。此外,还有一个ViewControllerViewControllerA模式显示

这就是我所做的,但它只会解雇ViewControllerA并且没有任何反应

let controller = self.storyboard?.instantiateViewControllerWithIdentifier("cameraViewController") as! UINavigationController
        self.dismissViewControllerAnimated(true, completion: { () -> Void in
            self.presentingViewController?.presentViewController(controller, animated: true, completion: nil)
        })

2 个答案:

答案 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)
})