Как мне уведомить об изменениях в UITextField?

#uibutton #uitextfield

#uibutton #uitextfield

Вопрос:

У меня есть два текстовых поля (одно для имени пользователя, другое для пароля) и у меня есть одна кнопка (для входа). Оба текстовых поля имеют clearButtonMode как YES (то есть я предоставляю маленькую крестиковую кнопку x в правом конце текстового поля, чтобы стереть поле одним щелчком мыши).

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

Пожалуйста, подскажите мне, как это сделать….

Заранее спасибо

Ответ №1:

Вы можете использовать уведомление UITextFieldTextDidChangeNotification для обоих полей и соответствующим образом установить enabled для вашей кнопки.

Пример кода:

 // add the observer
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(textFieldDidChange:) 
                                             name:@"UITextFieldTextDidChangeNotification" 
                                          object:nil];

// the method to call on a change
- (void)textFieldDidChange:(NSNotification*)aNotification 
{
    myButton.enabled = [self bothTextFieldsHaveContent];
}

- (BOOL)bothTextFieldsHaveContent
{   
    return ![self isStringEmptyWithString:textField1.text) amp;amp; 
           ![self isStringEmptyWithString:textField2.text);
}

// a category would be more elegant
- (BOOL)isStringEmptyWithString:(NSString *)aString
{
    NSString * temp = [aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    return [temp isEqual:@""];
}
  

Комментарии:

1. Хотя на данный момент функциональной разницы нет, вы должны использовать UITextFieldTextDidChangeNotification ключ User Info вместо явной NSString @"UITextFieldTextDidChangeNotification" (просто удалите @ кавычки и). Значение пользовательского информационного ключа может изменяться со временем, и в случае, если это произойдет, использование явной NSString приведет к нарушению вашего кода. Хорошей идеей будет следовать простейшим рекомендациям.