Предотвратить отклонение UIAlertView
Как форма проверки, есть ли способ предотвратить отклонение вида предупреждения при нажатии кнопки "ОК"?
Сценарий: у меня есть 2 текстовых поля в alertview для имени пользователя/пароля. Если оба пустые и пользователь нажимает "ОК", я не хочу, чтобы предупреждение было отклонено.
Ответы
Ответ 1
iOS 5 вводит новое свойство UIAlertView
для обработки именно этой проблемы.
alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;
Документация Apple по UIAlertView.
Добавьте новый метод UIAlertViewDelegate
, чтобы обрабатывать включение/отключение кнопки.
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
Документация Apple по UIAlertViewDelegate.
Ответ 2
Вы делаете это неправильно, вы должны включить и отключить кнопку отправки в соответствии с вводом. Сначала вы должны получить доступ к кнопке. Это легко, просто создайте оповещение без кнопок, создайте автономную кнопку и добавьте ее в диалог:
[alert addButtonWithTitle:@"OK"];
UIButton *submitButton = [[alert subviews] lastObject];
[submitButton setEnabled:…];
И тогда вы должны установить делегат для этих текстовых полей и включить или отключить кнопку при изменении полей:
- (BOOL) textField: (UITextField*) textField
shouldChangeCharactersInRange: (NSRange) range
replacementString: (NSString*) string
{
int textLength = [textField.text length];
int replacementLength = [string length];
BOOL hasCharacters = (replacementLength > 0) || (textLength > 1);
[self setButtonsAreEnabled:hasCharacters];
}
// Disable the ‘Return’ key on keyboard.
- (BOOL) textFieldShouldReturn: (UITextField*) textField
{
return NO;
}
Конечно, вы должны обернуть все это в отдельный класс, чтобы не испортить код вызова.
Ответ 3
Я не считаю, что вам действительно нужно передавать имена кнопок. Просто вытащите строку OK и оставьте ее как "ноль".