С выпуском iOS 5 SDK класс UIAlertView был обновлен, чтобы изначально поддерживать поля ввода текста, безопасного ввода текста и поля имени пользователя / пароля. Этот быстрый совет покажет, как воспользоваться этими новыми улучшениями!
В предыдущем полнометражном уроке для начинающих я помогал читателю настроить проект с пользовательской кнопкой и фоном. Я буду использовать проект, созданный в этом руководстве, в качестве отправной точки для этого.
Представление стилей Alert View
 Элементы макета и формы UIAlertView теперь можно легко и быстро контролировать, задав свойство alertViewStyle .  Возможные варианты для этого свойства включают в себя: 
UIAlertViewStylePlainTextInput
Этот стиль добавит одно текстовое поле к представлению оповещения:

UIAlertViewStyleSecureTextInput
Этот стиль аналогичен текстовому полю, за исключением того, что все введенные символы будут скрыты:

UIAlertViewStyleLoginAndPasswordInput
Установка этого значения для свойства стиля добавит как обычное текстовое поле для ввода имени пользователя, так и защищенное текстовое поле для ввода пароля:

UIAlertViewStyleDefault
Это стиль по умолчанию, который мы все уже знаем и любим:

Реализация
  Любой из вышеперечисленных стилей так же просто реализовать, как установить свойство alertViewStyle в UIAlertView , либо с точечной нотацией: 
| 
 1 
 | 
 message.alertViewStyle = UIAlertViewStylePlainTextInput; 
 | 
Или напрямую вызывая метод setter:
| 
 1 
 | 
 [message setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
 | 
Это оно! После того, как вы установили это свойство, отображение предупреждений будет соответствующим образом скорректировано.
  Конечно, отображение текстовых полей в представлении предупреждений не принесет особой пользы, если вы не сможете также получить доступ к значению, которое вводит пользователь.  Это делается с помощью метода textFieldAtIndex:  Вы просто указываете индекс текстового поля, к UITextField хотите получить доступ (0 — 1 в приведенных выше примерах), и UITextField соответствующий объект UITextField . 
  В качестве примера того, как это может работать, рассмотрим -alertView:clickedButtonAtIndex: метод делегата, который мы уже реализовали в прилагаемом демонстрационном проекте.  Если мы изменим стиль представления предупреждений на UIAlertViewStyleLoginAndPasswordInput и изменим заголовок кнопки по умолчанию на «Вход», то мы сможем получить доступ к значениям, введенным пользователем в методе делегата, следующим образом: 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
 | 
 — (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 
         if([title isEqualToString:@»Login»]) 
    { 
        UITextField *username = [alertView textFieldAtIndex:0]; 
        UITextField *password = [alertView textFieldAtIndex:1]; 
                 NSLog(@»Username: %@\nPassword: %@», username.text, password.text); 
    } 
} 
 | 
Потенциальные ловушки
Есть несколько способов, которыми использование новых стилей оповещений может иметь неприятные последствия.
Слишком много кнопок
  Если вы добавите всего три кнопки в UIAlertView , макет каждого нового стиля станет искаженным. 

Все новые стили могут обрабатывать 2 кнопки удобно, но стиль по умолчанию, используемый в прошлом, может обрабатывать до 6, когда заголовок и сообщение удалены:

Слишком много текста
  Стиль UIAlertViewStyleLoginAndPasswordInput не может UIAlertViewStyleLoginAndPasswordInput обрабатывать переполнение текста, как это делают другие стили: 

Даже введя просто короткое сообщение типа «Вы должны ввести имя пользователя и пароль». было достаточно, чтобы испортить эстетику.
Проверка ввода
  В дополнение к обсужденным выше стилям кнопок в iOS 5 SDK также появился новый метод UIAlertViewDelegate , -alertViewShouldEnableFirstOtherButton:  Этот метод вызывается как при первом отображении представления оповещения, так и каждый раз, когда пользователь вводит символ в одно из текстовых полей, что позволяет очень просто выполнить базовую проверку ввода перед принятием значения пользователя. 
Рассмотрим следующий пример:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
 | 
 — (IBAction)showMessage:(id)sender { 
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@»What is your phone number?» 
                                                      message:nil 
                                                     delegate:self 
                                            cancelButtonTitle:@»Cancel» 
                                            otherButtonTitles:@»Continue», nil]; 
             [message setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
             [message show]; 
} 
— (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView 
{ 
    NSString *inputText = [[alertView textFieldAtIndex:0] text]; 
    if( [inputText length] >= 10 ) 
    { 
        return YES; 
    } 
    else 
    { 
        return NO; 
    } 
} 
 | 
Приведенный выше код позволит пользователю нажимать кнопку «Продолжить» только после того, как он введет не менее 10 символов в поле формы. Я уверен, что вы захотите сделать свою собственную проверку более надежной, но этот базовый пример показывает, насколько полезным может быть этот новый метод делегата.