使用UIAlertAction关闭视图控制器

时间:2016-02-24 18:35:49

标签: ios swift uialertview dismiss

我试图提出退出警报。当用户点击时,我希望我的视图控制器使用可以为我提供完成处理程序的方法来解除。

视图控制器位于导航控制器内,是堆栈中的第二个。

我想出了以下代码:

@IBAction func logOut() {
        let logOutAlert = UIAlertController.init(title: "Log out", message: "Are you sure ?", preferredStyle:.Alert)

        logOutAlert.addAction(UIAlertAction.init(title: "Yes", style: .Default) { (UIAlertAction) -> Void in
            //Present entry view ==> NOT EXECUTED
            self.dismissViewControllerAnimated(true, completion:nil)
        })

        logOutAlert.addAction(UIAlertAction.init(title: "Cancel", style: .Cancel, handler: nil))

        self.presentViewController(logOutAlert, animated: true, completion: nil)
}

读取了行self.dismissViewControllerAnimated(true, completion:nil),但它没有做任何事情。

1 个答案:

答案 0 :(得分:5)

我怀疑dismissViewControllerAnimated没有为你做任何事情,因为视图控制器没有以模态方式呈现,而是通过导航控制器显示。要解雇is,你可以告诉导航控制器从堆栈中弹出它,如下所示:

    logOutAlert.addAction(UIAlertAction.init(title: "Yes", style: .Default) { (UIAlertAction) -> Void in
        self.navigationController?.popViewControllerAnimated(true)
        })

不幸的是,popViewControllerAnimated似乎没有提供一种方法来附加您自己的完成处理程序。如果您需要一个,您仍然可以使用关联的CATransaction添加一个,这可能看起来像这样:

    logOutAlert.addAction(UIAlertAction.init(title: "Yes", style: .Default) { (UIAlertAction) -> Void in
        CATransaction.begin()
        CATransaction.setCompletionBlock(/* YOUR BLOCK GOES HERE */)
        self.navigationController?.popViewControllerAnimated(true)
        CATransaction.commit()
        })