Controlador de escritura para UIAlertAction

UIAlertView un UIAlertView para el usuario y no puedo encontrar la manera de escribir el controlador. Este es mi bash:

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

Tengo un montón de problemas en Xcode.

La documentación dice convenience init(title title: String!, style style: UIAlertActionStyle, handler handler: ((UIAlertAction!) -> Void)!)

El conjunto de bloques / cierres está un poco sobre mi cabeza en este momento. Cualquier sugerencia es muy apreciada.

En lugar de self en su controlador, ponga (alerta: UIAlertAction!). Esto debería hacer que tu código se vea así

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

esta es la forma correcta de definir manejadores en Swift.

Como Brian señaló a continuación, también hay formas más fáciles de definir estos manejadores. Usando sus métodos se discute en el libro, mira la sección titulada Closures

Las funciones son objetos de primera clase en Swift. Entonces, si no desea utilizar un cierre, también puede definir una función con la firma apropiada y luego pasarla como el argumento del handler . Observar:

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

Puedes hacerlo tan simple como esto usando 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") } 

o

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

Todas las respuestas anteriores son correctas. Solo estoy mostrando otra forma de hacerlo.

Supongamos que quiere una UIAlertAction con título principal, dos acciones (guardar y descartar) y botón cancelar:

 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) 

Esto funciona para swift 2 (Xcode Version 7.0 beta 3)

Cambio de syntax en swift 3.0

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

así es como lo hago con xcode 7.3.1

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

// crea el botón

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

// agregando el botón al control de alerta

 myAlert.addAction(sayhi); 

// todo el código, este código agregará 2 botones

  @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") } 

crear alerta, probado en xcode 9

 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) 

y la función

 func finishAlert(alert: UIAlertAction!) { } 

en swift4:

 let alert=UIAlertController(title:"someAlert", message: "someMessage", preferredStyle:UIAlertControllerStyle.alert ) alert.addAction(UIAlertAction(title: "ok", style: UIAlertActionStyle.default, handler: { _ in print("FOO ") })) present(alert, animated: true, completion: nil) 
  1. En Swift

     let alertController = UIAlertController(title:"Title", message: "Message", preferredStyle:.alert) let Action = UIAlertAction.init(title: "Ok", style: .default) { (UIAlertAction) in // Write Your code Here } alertController.addAction(Action) self.present(alertController, animated: true, completion: nil) 
  2. En el objective C

     UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *OK = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; [alertController addAction:OK]; [self presentViewController:alertController animated:YES completion:nil];