UITextFieldDelegate, проверка наличия текста в textFields
У меня небольшая проблема. В моем TableView есть два textFields, которые устанавливают свойство объекта. Для этого я хочу заставить пользователя написать что-то в textField, прежде чем строка будет фактически установлена для объекта. Так что в основном простой ([textField.text length] > 0)
вещь. Но я хочу, чтобы пользователь написал строки в обоих текстовых полях, чтобы наконец включить кнопку "Готово". Я решил это раньше, но только с одним текстовым полем со следующим UITextFieldDelegate
метод.
- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newText = [theTextField.text stringByReplacingCharactersInRange:range withString:string];
self.doneBarButton.enabled = ([newText length] > 0);
return YES;
}
Мое решение для новой проблемы, так что теперь с двумя textFields это:
- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newText = [theTextField.text stringByReplacingCharactersInRange:range withString:string];
if ([theTextField.placeholder isEqualToString:@"textField1"]) {
if ([theTextField.text length] > 0) {
enabledVokabel = YES;
} else {
enabledVokabel = NO;
}
}
if ([theTextField.placeholder isEqualToString:@"textField2"]) {
if ([theTextField.text length] > 0) {
enabledUebersetung = YES;
} else {
enabledUebersetung = NO;
}
}
self.doneBarButton.enabled = (enabledVokabel && enabledUebersetung);
return YES;
}
Поэтому я хочу, чтобы doneBarButton был включен, когда оба textFields (textField1 и textField2) заполнены текстом. Но я хочу, чтобы, если пользователь удалил текст, который он только что написал в doneBarButton, он отключается, как только текстовые поля становятся пустыми. Это не работает таким образом. У тебя есть решение? Или, может быть, лучший способ решить это?
2 ответа
Либо просто подключите значение, измененное в interface Builder, к методу IBAction в любом из классов, которые у вас есть в вашем представлении. Или вы можете сделать это в коде с:
[textField addTarget:self
action:@selector(myIBActionMethod:)
forControlEvents:UIControlEventEditingChanged];
И проверьте длину ввода.
Вы можете подключить оба текстовых поля к одному и тому же методу и проверять длину обоих текстовых полей каждый раз, когда он вызывается, если у вас есть IBOutlets для них обоих.
Я бы сохранил ссылку на оба UITextViews
Позвольте сказать.
IBOutlet UITextView *textView1;
IBOutlet UITextView *textView2;
правильно связано с вашим xib/storyboards
, Кроме того, я бы предпочел использовать
- (void)textViewDidChange:(UITextView *)textView
Перезвоните. В соответствии с документом shouldChangeCharactersInRange похоже, что этот метод вызывается до фактического изменения текста.
Для enabled
состояние, это будет выглядеть примерно так.
self.doneBarButton.enabled = [textView1.text length] > 0 && [textView2.text length] > 0;