Распространенная ошибка, которую допускают люди при использовании UIAlertView
, заключается в том, что они думают, что отправка сообщения show
заблокирует основной поток.Это не.Ваш код продолжает выполняться, даже если на экране есть предупреждение.Таким образом, не существует значения для UITextField
, которое вы передали.
Что вам нужно сделать, это реализовать UIAlertViewDelegate
в вашем UIViewController
, чтобы получить все, что пользователь ввел в текстовое поле.Тем не менее, вы все равно должны проверить значение nil
, потому что если вы ничего не введете, значение text
будет nil
.
ОБНОВЛЕНИЕ: Этот ответ был опубликован до Appleсоздал API для добавления UITextField
к предупреждению через UIAlertViewStyle
.Вот обновленный код, заимствованный у @ matt
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Enter Name"
message:@" "
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
Затем в UIAlertViewDelegate
перезвоните:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
NSString *name = [alertView textFieldAtIndex:0].text;
// Insert whatever needs to be done with "name"
}
}