#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 приведет к нарушению вашего кода. Хорошей идеей будет следовать простейшим рекомендациям.