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


当前回答

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

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

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

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

最好的运气. .

其他回答

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

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

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

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

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

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

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

最好的运气. .

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

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

Use:

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

而不是:

self.navigationController.dismissViewControllerAnimated(true, 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)
   }
   ...
}