У меня есть несколько полей uitext в представлении, и я хотел бы отключить uibutton, пока во всех полях что-то не введено в них. Какой лучший способ сделать это?
В идеале я хотел бы также провести некоторую базовую проверку (убедитесь, что все записи являются числами).
EDIT
Не удалось получить приведенные ниже решения для полной работы. Ниже приведена версия, с которой я работал (собранные вместе из Брэда, Майка и других источников)
Использовать UITextFieldDelegate
Создание текстовых полей в IB и присоединение к соответствующим IBOutlets - textField1, textField2 и т. Д.
Создайте и подключите кнопку к соответствующему IBOutlet (submitButton) и IBAction (submitAction) в IB. Снимите флажок в IB.
Создание метода проверки в контроллере представления:
-(IBAction)validateTextFields:(id)sender
{
// make sure all fields are have something in them
if ((textField1.text.length > 0) && (textField2.text.length > 0) && (textField3.text.length > 0)) {
self.submitButton.enabled = YES;
}
else {
self.submitButton.enabled = NO;
}
}
Подключите каждое событие 'Редактирование изменения' к методу validateTextFields. (Примечание: событие «Значение изменено» не работает)
Используйте этот метод делегата, чтобы ограничить количество символов (в моем случае цифрами и до одной точки). Этот бит от Эрики Садун, кстати.
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *cs;
NSString *filtered;
// Check for period
if ([textField.text rangeOfString:@"."].location == NSNotFound)
{
cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
// Period is in use
cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
Вуаля.