为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中的第一类对象。 所以,如果你不想使用闭包,你也可以用适当的签名定义一个函数,然后把它作为handler
parameter 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!) { }