Я создал UIAlertView
Как отличить UIAlertView Отмена и возврат текста в UIAlertViewStyleSecureTextInput?
alert = [[UIAlertView alloc] initWithTitle:@"Test"
message:@"Working"
delegate:self
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert setAlertViewStyle:UIAlertViewStyleSecureTextInput];
alert.tag = kAlertTypePIN;
UITextField *textField = [alert textFieldAtIndex:0];
textField.delegate = self;
Если я нажимаю Retun ключ в UIAlertView
TextField он отлично работает, он вызывает:
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[alert dismissWithClickedButtonIndex:0 animated:YES];
}
, а затем
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
NSLog(@"didDismissWithButtonIndex");
// If no text or wrong text show alert again otherwise normal actions
}
Но если нажать cancel, это 1-й вызов textFieldDidEndEditing
, который, в свою очередь, вызывает делегата предупреждения. И снова он вызывает метод делегата alert.
Так что оповещение, которое будет отображаться, не отображается, и клавиатура начинает всплывать и возвращается. Таким образом, предупреждение не отображается в случае его отображения.
Если у вас возникнут сомнения в потоке, пожалуйста, спросите меня.
Как исправить проблему?
Nope. У меня два потока. Оба потока должны войти в код, присутствующий в функции didDismissWithButtonIndex. Там я проверяю, является ли введенный текст недопустимым или нулевой длины, и если это так, я снова запустил одно и то же предупреждение. Один поток работает отлично - когда я нажимаю кнопку «Возврат» текстового поля alertview. 2-й поток не работает - когда я нажимаю кнопку «Отмена» в AlertView. Он вызывает endEditing 1-й, а затем делегат представления предупреждений. – wolverine
, если это так, тогда вы должны установить делегат оповещения, чтобы он был нулевым, когда вы нажимаете кнопку отмены. Таким образом, он не позволит перейти во второй раз в делегат. –