Статьи

iOS 5 SDK: ввод и проверка текста в UIAlertView

С выпуском iOS 5 SDK класс UIAlertView был обновлен, чтобы изначально поддерживать поля ввода текста, безопасного ввода текста и поля имени пользователя / пароля. Этот быстрый совет покажет, как воспользоваться этими новыми улучшениями!

В предыдущем полнометражном уроке для начинающих я помогал читателю настроить проект с пользовательской кнопкой и фоном. Я буду использовать проект, созданный в этом руководстве, в качестве отправной точки для этого.

Элементы макета и формы UIAlertView теперь можно легко и быстро контролировать, задав свойство alertViewStyle . Возможные варианты для этого свойства включают в себя:

Этот стиль добавит одно текстовое поле к представлению оповещения:

UIAlertViewStylePlainTextInput Рисунок

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

UIAlertViewStyleSecureTextInput Рисунок

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

UIAlertViewStyleLoginAndPasswordInput Figure

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

UIAlertViewStyleDefault Figure

Любой из вышеперечисленных стилей так же просто реализовать, как установить свойство 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 , макет каждого нового стиля станет искаженным.

UIAlertView Рисунок

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

UIAlertView Рисунок

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

UIAlertViewStyleLoginAndPasswordInput Figure

Даже введя просто короткое сообщение типа «Вы должны ввести имя пользователя и пароль». было достаточно, чтобы испортить эстетику.

В дополнение к обсужденным выше стилям кнопок в 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 символов в поле формы. Я уверен, что вы захотите сделать свою собственную проверку более надежной, но этот базовый пример показывает, насколько полезным может быть этот новый метод делегата.