如何从UIAlertController的UIAlertAction处理程序中解除UIViewController?

时间:2016-03-04 22:36:17

标签: swift uiviewcontroller uialertcontroller

我想向用户提供一个简单的UIAlertController,其中一个选项触发关闭父视图控制器。这是我正在使用的代码:

    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)

    alert.addAction(UIAlertAction(title: "Close View", style: UIAlertActionStyle.Destructive, handler: {
        action in

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

    alert.addAction(UIAlertAction(title: "CANCEL", style: UIAlertActionStyle.Cancel, handler: nil))

    self.presentViewController(alert, animated: true, completion: nil)

它没有任何效果。执行“关闭视图”处理程序后,显示警报的视图控制器仍然存在。

我还在UIAlertAction操作块中尝试了self.navigationController?.dismissViewControllerAnimated(true, completion: nil),但这也没有用。

2 个答案:

答案 0 :(得分:8)

使用

self.navigationController?.popViewControllerAnimated(true)

而不是

self.dismissViewControllerAnimated(true, completion: nil)

按需运行并关闭显示警报的视图控制器。

答案 1 :(得分:0)

您使用presentViewController来呈现警报。因此,如果您使用self.dismissViewController,它只是解除警报,而不是父视图控制器。如果您尝试隐藏父视图控制器,则可以创建宽度高度等于self.view的视图,并将其设置为黑色。然后使用view.addSubView在任何时候添加它。