2015-01-25 3 views
3

Я хотел бы создать следующие UIAlertAction:Создание UIAlertAction в Swift

img1

@IBAction func buttonUpgrade(sender: AnyObject) { 

      let alertController = UIAlertController(title: "Title", 
     message: "Message", 
     preferredStyle: UIAlertControllerStyle.Alert) 

    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in 
     // ... 
    } 

    alertController.addAction(cancelAction) 
} 

Я знаю, что UIAlertController инициализируется title, message, и он предпочитает быть ли отображается как предупреждение или лист действий.

Когда кнопка нажата, я хотел бы отобразить предупреждение, но alert.show() не работает. Почему мой код не работает?

ответ

14

Основная проблема здесь является то, что UIAlertController (в отличие от UIAlertView) является подклассом UIViewControlller, то есть он должен быть представлен как таковые (а не с помощью метода show()). Кроме этого, если вы хотите изменить цвет кнопки отмены на красный, вам необходимо установить стиль предупреждения об отмене на .Destructive.

Это работает только если вы хотите, чтобы кнопка была красной. Если вы хотите изменить цвета кнопок в контроллере предупреждений на произвольные цвета, это можно сделать только путем установки свойства tintColor свойства view контроллера предупреждения, что изменит цвет оттенка всех его кнопок (кроме тех, которые являются разрушительными). Следует отметить, что при разработке парадигм дизайна, которые Apple внедрила, нет необходимости менять цвет кнопки отмены из-за последствий его выделения жирным шрифтом.

Если вы все еще хотите, чтобы текст был красный, хотя, это может быть сделано, как это:

let alertController = UIAlertController(
    title: "Title", 
    message: "Message", 
    preferredStyle: UIAlertControllerStyle.Alert 
) 

let cancelAction = UIAlertAction(
    title: "Cancel", 
    style: UIAlertActionStyle.Destructive) { (action) in 
    // ... 
} 

let confirmAction = UIAlertAction(
    title: "OK", style: UIAlertActionStyle.Default) { (action) in 
    // ... 
} 

alertController.addAction(confirmAction) 
alertController.addAction(cancelAction) 

presentViewController(alertController, animated: true, completion: nil) 

Который дает результаты вы после:

enter image description here

+0

Я до сих пор не могу обмотаться за быстрый синтаксис закрытий ... Что значит «в»? почему все _inside_ фигурные скобки? Потребуется время, чтобы привыкнуть к этому ... –

+0

'in' просто отделяет аргументы от реализации закрытия – MrBr

2
var alertController = UIAlertController(title: "Alert", message:"Message", preferredStyle: UIAlertControllerStyle.Alert) 
let confirmed = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil) 
let cancel = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil) 

alertController.addAction(confirmed) 
alertController.addAction(cancel) 
self.presentViewController(alertController, animated: true, completion: nil) 

Важно, чтобы последняя строка «self.presentViewController» отображала ваше предупреждение.

Надеется, что это работает;)

+0

Благодарим Вас за в ответ! Я хотел бы иметь кнопку «.Cancel». – Cesare

+0

Я искал документацию, но не смог найти ничего о недействительности параметра обработчика. Но кажется, что безопасно пройти в нуле. – MrBr

5
let alertController = UIAlertController(
    title: "Title", 
    message: "Message", 
    preferredStyle: UIAlertControllerStyle.Alert 
) 

let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in 
    // ... 
} 

let okayAction = UIAlertAction(title: "OK", style: .Default) { (action) in 
    // ... 
} 

alertController.addAction(okayAction)  
alertController.addAction(cancelAction) 

self.presentViewController(alertController, animated: true) { 
    // ... 
} 
+0

Где вы положили '.Cancel'? – Cesare

+0

вар cancelAction = UIAlertAction (название: "Отменить", стиль: UIAlertActionStyle.Cancel) { UIAlertAction в NSLog ("Отменить прессованный") } alert.addAction (cancelAction) – RonM

+0

Пожалуйста, добавьте его в ответ. – Cesare

Смежные вопросы