我试图解散一个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中使用当前方法,那么你应该调用这个函数,来解散子VC

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

如果你用push方法调用子VC,用这个方法来解散子VC

self.navigationController?.popViewController(animated: true)

其他回答

如果你这样做,我猜你可能不会在控制台得到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")
  }    
}

将你想要解散的视图嵌入到一个NavigationController中 添加一个BarButton与“完成”作为标识符 使用选定的Done按钮调用助理编辑器 为这个按钮创建一个IBAction 将这一行添加到括号中: 自我。disdisviewcontrolleranimated (true, completion: nil)

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

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

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

self.navigationController?.popViewController(animated: true)

这是一种方法来解散当前的视图控制器并移回之前的视图控制器。您只能通过故事板来实现这一点。

开放的故事板 右键单击取消按钮并将其拖到前一个视图控制器,在那里您想移动回前一个控制器 现在释放右键点击,你可以看到一些行动执行取消按钮 现在从列表中选择“弹出窗口呈现”选项 现在你可以通过点击取消按钮来取消当前视图

请试试这个,它对我很有效。

第二种方法-使用- navigationController.popViewControllerAnimated(true)

最好的运气. .

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