我试图解散一个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从未被解散。有什么问题吗?


当前回答

如果你想解散你的视图控制器使用这个。这段代码是用按钮动作来编写的,以消除VC

  @IBAction func cancel(sender: AnyObject) {
   dismiss(animated: true, completion: nil)
  }

其他回答

在Swift 4.1和Xcode 9.4.1中

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

self.navigationController?.popViewController(animated: false)

如果你这样做,我猜你可能不会在控制台得到println消息,

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

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

因为你使用了push presenting viewController,因此,你可以使用

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

如果你呈现一个没有导航控制器的控制器,你可以从呈现控制器的一个方法调用下面的代码。

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

如果你的ViewController是模态呈现的,可选的presentingViewController将不是nil,代码将被执行。

在Swift 3.0到4.0中,只需在函数中输入以下内容即可:

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

或者如果你在导航控制器中,你可以“弹出”它:

self.navigationController?.popViewController(animated: true)