如何从 Swift 中的 UIAlertAction 访问 self?

How do I access self from UIAlertAction in Swift?

我想在有人同意警报操作时导航回根视图控制器。但是 Alert 操作不允许访问 self.

在 AlertAction 中获取当前导航控制器的解决方法是什么,

这是代码,

func buttonAction(sender:UIButton!)
{
let alertController = UIAlertController(title: "IQ", message:"Thank you for your feedback!", preferredStyle: .Alert)
alertController.addAction(okAction)
self.presentViewController(alertController, animated: true, completion: nil)
}

var okAction = UIAlertAction(title: "Menu", style:UIAlertActionStyle.Default) {
UIAlertAction in
NSLog("OK Pressed")
self.navigationController?.popToRootViewControllerAnimated(true) //error
}

您也可以这样做:

let alert = UIAlertController(title: "Alert", message: "Message.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: { action in
        self.navigationController?.popToRootViewControllerAnimated(true)
}))
self.presentViewController(alert, animated: true, completion: nil)

在尝试从导航控制器中弹出之前,您需要关闭显示的视图控制器(警报)。

您所要做的就是为okAction属性定义一个getter。

var okAction: UIAlertAction {        
    get {
        return UIAlertAction(title: "Menu", style:UIAlertActionStyle.Default) {
            UIAlertAction in
            NSLog("OK Pressed")
            self.navigationController?.popToRootViewControllerAnimated(true)
        }
    }
}

在 Xcode 7.1.1

中测试