Может ли UIAlertAction вызывать функцию?
Можно ли подключить функцию к UIAlertAction
?
Таким образом, после того, как пользователь нажимает кнопку ОК, он выполняет действие? Разве это не то, что делает параметр обработчика?
let alert: UIAlertController = UIAlertController(title: "Email already registered", message: "Please enter a different email", preferredStyle: .Alert)
let okButton = UIAlertAction(title: "OK", style: .Default, handler: backToLogin())
alert.addAction(okButton)
self.presentViewController(alert, animated: true, completion: nil)
...
func backToLogin() {
self.performSegueWithIdentifier("toLoginPage", sender: self)
}
2 ответа
Решение
Вы можете использовать функцию в качестве handler
, но он должен иметь правильный тип. Кроме того, вы не должны вызывать его, когда вы передаете его в качестве аргумента, т. Е. Вместо handler: backToLogin()
(который установит возвращаемое значение backToLogin
как обработчик) вы бы handler: backToLogin
без ()
,
Следующее должно работать:
func backToLogin(alertAction: UIAlertAction) {
self.performSegueWithIdentifier("toLoginPage", sender: self)
}
let okButton = UIAlertAction(title: "OK", style: .Default, handler: backToLogin)
Но нужно изменить backToLogin
может победить цель, поэтому вы можете просто использовать замыкание:
let okButton = UIAlertAction(title: "OK", style: .Default) { _ in
self.backToLogin()
}
You need to enter the handler
let okButton = UIAlertAction(title: "OK", style: .Default, handler: {
(UIAlertAction) in
self.backToLogin()
})
}
См. Этот ответ для получения дополнительной информации: Написание обработчика для UIAlertAction