UITextFieldDelegate,检查textFields中是否包含文本

时间:2013-10-13 11:49:39

标签: ios objective-c uitextfielddelegate

我有点问题。 我的TableView中有两个textFields来设置对象的属性。为了做到这一点,我想强制用户在字符串实际设置为对象之前在textField中写一些东西。所以基本上是一个简单的([textField.text length] > 0)事。 但是我希望用户必须在两个textFields中编写字符串才能最终启用“Done”-Button。 我之前解决了这个问题,但只有一个文本字段使用以下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;
    }

我对新问题的解决方案,现在有两个textField就是这个:

- (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;
}

所以我希望在textFields(textField1和textField2)都填充文本时启用doneBarButton。但我希望这样,如果用户删除了他/她刚刚在doneBarButton中写的文本,一旦textFields为空,就会被禁用。 它不起作用。你有解决方案吗?或者也许是一种更好的解决方法?

2 个答案:

答案 0 :(得分:2)

要么将interfacebuilder中更改的值更改为视图中任何类中的IBAction方法。或者您可以使用以下代码执行此操作:

[textField addTarget:self 
              action:@selector(myIBActionMethod:) 
    forControlEvents:UIControlEventEditingChanged];

并检查输入的长度。

你可以将两个文本字段连接到同一个方法,并在每次调用时检查两个文本字段的长度,如果你有两个文本字段的话。

答案 1 :(得分:0)

我会为UITextViews保留一个参考,让我们说.-

IBOutlet UITextView *textView1;
IBOutlet UITextView *textView2;

xib/storyboards正确关联。另外,我宁愿使用

- (void)textViewDidChange:(UITextView *)textView

回调。根据{{​​3}}文档,看起来在实际更改文本之前调用此方法。

对于enabled条件,它看起来像这样.-

self.doneBarButton.enabled = [textView1.text length] > 0 && [textView2.text length] > 0;