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


当前回答

@IBAction func back(_ sender: Any) {
        self.dismiss(animated: false, completion: nil)
    }

其他回答

根据我的经验,我添加了一个方法来解散我作为UIViewController的扩展:

extension UIViewController {
    func dismissMe(animated: Bool, completion: (()->())?) {
        var count = 0
        if let c = self.navigationController?.viewControllers.count {
            count = c
        }
        if count > 1 {
            self.navigationController?.popViewController(animated: animated)
            if let handler = completion {
                handler()
            }
        } else {
            dismiss(animated: animated, completion: completion)
        }
    }
}

然后我调用这个方法来解散任何UIViewController子类中的视图控制器。例如,在取消动作中:

class MyViewController: UIViewController {
   ...
   @IBAction func cancel(sender: AnyObject) {
     dismissMe(animated: true, completion: nil)
   }
   ...
}

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

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

Use:

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

而不是:

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

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

不要创建任何从取消或完成到其他VC的segue,只把这段代码写在你的按钮@IBAction上

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