我试图解散一个ViewController在一个IBAction调用遣散ViewController

  @IBAction func cancel(sender: AnyObject) {
    self.dismissViewControllerAnimated(false, completion: nil)
    println("cancel")
}

@IBAction func done(sender: AnyObject) {
    self.dismissViewControllerAnimated(false, completion: nil)
    println("done")
}

我可以在控制台输出中看到println消息,但ViewController从未被解散。有什么问题吗?


当前回答

从你的图片来看,你似乎是用push来呈现ViewController的

disdisviewcontrolleranimated用于关闭使用modal呈现的viewcontroller

斯威夫特2

navigationController.popViewControllerAnimated(true)

斯威夫特4

navigationController?.popViewController(animated: true)

dismiss(animated: true, completion: nil)

其他回答

我有办法解决你的问题。如果你使用模态显示视图,请尝试下面的代码来解除视图控制器:

斯威夫特3:

self.dismiss(animated: true, completion: nil)

OR

如果你使用push segue来呈现视图

self.navigationController?.popViewController(animated: true)

在Swift 4.1和Xcode 9.4.1中

如果你使用pushViewController来呈现新的视图控制器,使用这个

self.navigationController?.popViewController(animated: false)

苹果文档:

呈现视图控制器负责解散它呈现的视图控制器

因此,仅仅从它自身调用dismiss方法是一个不好的做法。

如果你是模态呈现,你应该做的是:

presentingViewController?.dismiss(animated: true, completion: nil)

Use:

self.dismiss(animated: true, completion: nil)

而不是:

self.navigationController.dismissViewControllerAnimated(true, completion: nil)

作为参考,请注意您可能正在解散错误的视图控制器。例如,如果你有一个警告框或模式显示在另一个模式之上。(例如,您可以在当前模式警报的顶部显示Twitter帖子警报)。在这种情况下,您需要调用两次dismiss,或者使用一个unwind segue。