Как добавить действие к кнопкам в Alert в Swift
Я программист начального уровня. Я пытаюсь добавить действие к кнопкам в Alert, но это не работает. Я просто хочу проверить, может ли выбор кнопки оповещения изменить текст в метке, но это не работает. Конечно, я хорошо вижу предупреждение и кнопки, но после нажатия кнопки ничего не происходит.
@IBOutlet var statusLabelAlert : UILabel
var alertTest = UIAlertView()
@IBAction func alertButton(sender : AnyObject) {
alertTest.message = "Select one!"
alertTest.addButtonWithTitle("1st")
alertTest.addButtonWithTitle("2nd")
alertTest.addButtonWithTitle("3rd")
alertTest.title = "Test Alert"
alertTest.show()
}
func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){
switch buttonIndex{
case 0:
statusLabelAlert.text = "1st"
case 1:
statusLabelAlert.text = "2nd"
case 2:
statusLabelAlert.text = "3rd"
default:
statusLabelAlert.text = "error"
}
}
5 ответов
Ваш метод clickedButtonAtIndex вызывает? Поставь точку останова и отладь код. Вы не устанавливаете делегат alertView.
@IBOutlet var statusLabelAlert : UILabel
var alertTest = UIAlertView()
alertTest.delegate = self //set the delegate of alertView
@IBAction func alertButton(sender : AnyObject) {
alertTest.message = "Select one!"
alertTest.addButtonWithTitle("1st")
alertTest.addButtonWithTitle("2nd")
alertTest.addButtonWithTitle("3rd")
alertTest.title = "Test Alert"
alertTest.show()
}
func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){
switch buttonIndex{
case 0:
statusLabelAlert.text = "1st"
case 1:
statusLabelAlert.text = "2nd"
case 2:
statusLabelAlert.text = "3rd"
default:
statusLabelAlert.text = "error"
}
}
@IBOutlet var statusLabelAlert : UILabel
var alertTest = UIAlertView()
@IBAction func alertButton(sender : AnyObject)
{
alertTest.delegate = self
alertTest.message = "Select one!"
alertTest.addButtonWithTitle("1st")
alertTest.addButtonWithTitle("2nd")
alertTest.addButtonWithTitle("3rd")
alertTest.title = "Test Alert"
alertTest.show()
}
func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int)
{
switch buttonIndex
{
case 0:
statusLabelAlert.text = "1st"
case 1:
statusLabelAlert.text = "2nd"
case 2:
statusLabelAlert.text = "3rd"
default:
statusLabelAlert.text = "error"
}
}
Вы должны установить делегат вида оповещения:
alertTest.delegate = self
UIAlertView
использует шаблон делегата, что означает, что он вызывает методы своего делегата для достижения определенных целей или уведомления о событиях. С UIAlertView
Одним из таких событий является то, когда пользователь нажимает кнопку. Чтобы представление предупреждений знало, кому сообщить о касании пользователя, необходимо указать делегата, который реализует UIAlertViewDelegate
протокол. Ваш код реализует протокол, но он никогда не сообщает предупреждению о том, что вы хотите быть его делегатом, поэтому вы никогда не получите вызов метода.
IBOutlet var statusLabelAlert : UILabel
@IBAction func alertButton(sender : AnyObject) {
let alert = UIAlertController(title: "Alert", message: "This is an Alert", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "1st", style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) in
statusLabelAlert.text = "1st"
}))
alert.addAction(UIAlertAction(title: "2nd", style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) in
statusLabelAlert.text = "2nd"
}))
self.presentViewController(alert, animated: true, completion: nil)
}
Если вы не хотите делать что-либо при нажатии кнопки:
alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default, handler: nil))
Если это для iOS 8, вам следует переключиться на UIAlertController и UIAlertAction. UIAlertAction содержит то, что должна делать кнопка.