Advertisement
  1. Code
  2. iOS SDK

iOS 5 SDK: UIAlertView ввод текста и валидация

Scroll to top
Read Time: 3 min

() translation by (you can also view the original English article)

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

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

Введение в Alert View Styles

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

UIAlertViewStylePlainTextInput

Этот стиль добавит одно поле для ввода текста в Ваш Alert View:

UIAlertViewStylePlainTextInput Figure

UIAlertViewStyleSecureTextInput

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

UIAlertViewStyleSecureTextInput Figure

UIAlertViewStyleLoginAndPasswordInput

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

UIAlertViewStyleLoginAndPasswordInput Figure

UIAlertViewStyleDefault

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

UIAlertViewStyleDefault Figure

Реализация

Любой из выше перечисленных стилей легко реализовать настройкой свойств alertViewStyle Вашего UIAlertView, как с помощью точечного вызова:

1
message.alertViewStyle = UIAlertViewStylePlainTextInput;

так и с помощью вызова сеттер метода:

1
[message setAlertViewStyle:UIAlertViewStylePlainTextInput];

Вот и все! После того как Вы установите эти свойства, Ваш Alert View отобразиться соответствующим образом.

Конечно же, отображение поля для ввода текста в Alert View хорошо, но еще лучше, если Вы также можете иметь доступ к значениям, которые введены пользователем. Это возможно при использовании методаtextFieldAtIndex:. Вы только указываете индекс полю для ввода текста, к которому хотите получить доступ (0 – 1 в примерах выше), и соответствующий объект из UITextField будет возвращен.

На примере того как это должно работать рассмотрим делегатный метод -alertView:clickedButtonAtIndex: , который мы уже реализовали в прилагаемом демо проекте. Если мы изменим стиль Alert View на UIAlertViewStyleLoginAndPasswordInput и поменяем заглавие кнопки на "Login", то мы сможем получить доступ к значениям введённые пользователем в делегатном методе, следующим образом:

1
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
2
{
3
  NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
4
	
5
	if([title isEqualToString:@"Login"])
6
	{
7
		UITextField *username = [alertView textFieldAtIndex:0];
8
		UITextField *password = [alertView textFieldAtIndex:1];
9
        
10
		NSLog(@"Username: %@\nPassword: %@", username.text, password.text);
11
	}
12
}

Возможные ловушки

Есть несколько способов, при которых использование новых стилей Alert View могут иметь неприятные последствия.

Слишком много кнопок

Если Вы добавите не менее трех кнопок вUIAlertView, компоновка каждого нового стиля станет искаженной.

UIAlertView Figure

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

UIAlertView Figure

Слишком много текста

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

UIAlertViewStyleLoginAndPasswordInput Figure

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

Валидация ввода

В дополнении к обсуждаемым стилям, в iOS 5 SDK введен новый метод UIAlertViewDelegate, который называется -alertViewShouldEnableFirstOtherButton:. Этот метод вызывается в двух случаях: когда Ваш Alert View появляется в первый раз, а также все время, когда пользователь печатает символ в одном из полей для ввода текста, что позволяет с легкостью выполнить в начале проверку вводимых символов, а после принять их в качестве значений пользователя.

Рассмотрим это на следующем примере:

1
- (IBAction)showMessage:(id)sender {
2
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"What is your phone number?"
3
                                                      message:nil
4
                                                     delegate:self 
5
                                            cancelButtonTitle:@"Cancel" 
6
                                            otherButtonTitles:@"Continue", nil];
7
        
8
    [message setAlertViewStyle:UIAlertViewStylePlainTextInput];
9
        
10
    [message show];
11
}
12
13
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
14
{
15
    NSString *inputText = [[alertView textFieldAtIndex:0] text];
16
    if( [inputText length] >= 10 )
17
    {
18
        return YES;
19
    }
20
    else
21
    {
22
        return NO;
23
    }
24
}

Код приведенный выше позволить пользователю нажать кнопку «Дальше» только лишь после того как он введет не менее 10 символов в поле для ввода текста. Я уверен, что Вы захотите усложнить Вашу собственную валидацию данных, но этот простой пример всего лишь показывает, каким полезным может быть данный метод.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.