Написание обработчика для 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)!)
Целые блоки / закрытия немного над моей головой в данный момент. Любое предложение высоко ценится.
10 ответов
Поставьте вместо себя в своем обработчике (alert: UIAlertAction!). Это должно сделать ваш код похожим на это
alert.addAction(UIAlertAction(title: "Okay",
style: UIAlertActionStyle.Default,
handler: {(alert: UIAlertAction!) in println("Foo")}))
это правильный способ определения обработчиков в Swift.
Как указал Брайан ниже, существуют также более простые способы определения этих обработчиков. Использование его методов обсуждается в книге, посмотрите на раздел под названием Closures
Функции являются первоклассными объектами в Swift. Поэтому, если вы не хотите использовать замыкание, вы также можете просто определить функцию с соответствующей сигнатурой и затем передать ее как handler
аргумент. Заметим:
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 с основным заголовком, двумя действиями (сохранить и отменить) и кнопкой отмены:
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 Version 7.0 beta 3)
В 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)
Изменение синтаксиса в Swift 3.0
alert.addAction(UIAlertAction(title: "Okay",
style: .default,
handler: { _ in print("Foo") } ))
Вот как я делаю это с Xcode 7.3.1
// create function
func sayhi(){
print("hello")
}
// создать кнопку
let sayinghi = UIAlertAction(title: "More", style: UIAlertActionStyle.Default, handler: { action in
self.sayhi()})
// добавление кнопки в элемент управления предупреждением
myAlert.addAction(sayhi);
// весь код, этот код добавит 2 кнопки
@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")
}
Создать оповещение, протестировано в 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)
и функция
func finishAlert(alert: UIAlertAction!)
{
}
В Свифте
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)
В цели 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];
В Swift 5 вы также можете делать следующее:
let handler = { (action: UIAlertAction!) -> Void in
//do tasks
}
Затем, когда вы выполняете действие, просто замените его следующим образом:
let action = UIAlertAction(title: "Do it", style: .default, handler: handler)