为UIAlertAction编写处理程序

我向用户展示一个UIAlertView ,我不知道如何编写处理程序。 这是我的尝试:

 let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "Okay", style: UIAlertActionStyle.Default, handler: {self in println("Foo")}) 

我在Xcode中遇到了一堆问题。

文档中提到了convenience init(title title: String!, style style: UIAlertActionStyle, handler handler: ((UIAlertAction!) -> Void)!)

现在,整个街区/封闭物都比我头高一点。 任何build议都非常感谢。

放置(警告:UIAlertAction!),而不是自己的处理程序。 这应该使你的代码看起来像这样

  alert.addAction(UIAlertAction(title: "Okay", style: UIAlertActionStyle.Default, handler: {(alert: UIAlertAction!) in println("Foo")})) 

这是在Swift中定义处理程序的正确方法。

正如Brian指出的那样,还有更简单的方法来定义这些处理程序。 本书将讨论使用他的方法,请参阅“闭包”一节

函数是Swift中的第一类对象。 所以,如果你不想使用闭包,你也可以用适当的签名定义一个函数,然后把它作为handlerparameter passing。 注意:

 func someHandler(alert: UIAlertAction!) { // Do something... } alert.addAction(UIAlertAction(title: "Okay", style: UIAlertActionStyle.Default, handler: someHandler)) 

你可以像使用swift 2一样简单:

  let alertController = UIAlertController(title: "iOScreator", message: "Hello, world!", preferredStyle: UIAlertControllerStyle.Alert) alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Destructive,handler: { action in self.pressed() })) func pressed() { print("you pressed") } 

要么

 let alertController = UIAlertController(title: "iOScreator", message: "Hello, world!", preferredStyle: UIAlertControllerStyle.Alert) alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Destructive,handler: { action in print("pressed") })) 

以上所有的答案都是正确的,我只是展示了另一种可以做到的方式。

假设你想要一个带主标题的UIAlertAction,两个操作(保存并放弃)和取消button:

 let actionSheetController = UIAlertController (title: "My Action Title", message: "", preferredStyle: UIAlertControllerStyle.ActionSheet) //Add Cancel-Action actionSheetController.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)) //Add Save-Action actionSheetController.addAction(UIAlertAction(title: "Save", style: UIAlertActionStyle.Default, handler: { (actionSheetController) -> Void in print("handle Save action...") })) //Add Discard-Action actionSheetController.addAction(UIAlertAction(title: "Discard", style: UIAlertActionStyle.Default, handler: { (actionSheetController) -> Void in print("handle Discard action ...") })) //present actionSheetController presentViewController(actionSheetController, animated: true, completion: nil) 

这适用于swift 2(Xcode版本7.0testing版3)

swift 3.0中的语法更改

 alert.addAction(UIAlertAction(title: "Okay", style: .default, handler: { _ in print("Foo") } )) 

这是我如何使用Xcode 7.3.1

 // create function func sayhi(){ print("hello") } 

//创buildbutton

 let sayinghi = UIAlertAction(title: "More", style: UIAlertActionStyle.Default, handler: { action in self.sayhi()}) 

//将button添加到警报控件

 myAlert.addAction(sayhi); 

//整个代码,这段代码将添加2个button

  @IBAction func sayhi(sender: AnyObject) { let myAlert = UIAlertController(title: "Alert", message:"sup", preferredStyle: UIAlertControllerStyle.Alert); let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:nil) let sayhi = UIAlertAction(title: "say hi", style: UIAlertActionStyle.Default, handler: { action in self.sayhi()}) // this action can add to more button myAlert.addAction(okAction); myAlert.addAction(sayhi); self.presentViewController(myAlert, animated: true, completion: nil) } func sayhi(){ // move to tabbarcontroller print("hello") } 

创build警报,在xcode 9中testing

 let alert = UIAlertController(title: "title", message: "message", preferredStyle: UIAlertControllerStyle.alert) alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: self.finishAlert)) self.present(alert, animated: true, completion: nil) 

和function

 func finishAlert(alert: UIAlertAction!) { }