UIViewController连续解除呼叫

时间:2016-04-30 13:12:07

标签: ios iphone swift uiviewcontroller

我有三个视图控制器

  • ViewControllerA
  • ViewControllerB
  • ViewControllerC

这是我试图解决的一个场景

  • ViewControllerA在导航层次结构
  • 上推送ViewControllerB
  • ViewControllerB将ViewControllerC呈现为模态,带有close 代表

  • 按下ViewControllerC关闭按钮,发送关闭代理并关闭ViewControllerC

  • ViewControllerB收到close委托,并尝试解散 本身就显示了ViewControllerA

由于某种原因,ViewControllerB没有被解雇。如果我按下ViewControllerB中的取消按钮,则可以将其解除。

为什么不能连续解雇?

ViewControllerC

@IBAction func closeClick(sender: AnyObject) {
    self.closeDelegate?.didClose()
    self.dismissViewControllerAnimated(true, completion: nil)
}

ViewControllerB

func didClose() {
        print("did close") // gets called
        self.dismissViewControllerAnimated(false, completion: nil) // no dismiss
        //self.navigationController?.popViewControllerAnimated(false)
}

@IBAction func cancelClick(sender: AnyObject) {
        self.dismissViewControllerAnimated(true, completion: nil) // works
}

1 个答案:

答案 0 :(得分:1)

您说您正在将视图控制器B推到导航控制器上。无法关闭视图控制器B,因为包含它的导航控制器是根视图控制器。

您需要pop返回导航控制器的根视图控制器,因此您在视图控制器A上的委托方法实现应该执行pop而不是dismiss。