如何检查两个文本字段是否相同?

时间:2014-04-08 21:58:46

标签: ios objective-c

我知道这可能被视为重复,但我保证不是。

每个人都给出了类似的答案:

if ([_confirm.text isEqualToString: _password.text] || resultantLength2 < 3) {
            textField.textColor = [UIColor redColor];
            [_next setEnabled:NO];

        }else{
            [_next setEnabled:YES];
        }
}

那为什么这不起作用?

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

if (textField == _confirm || textField == _password) {
        int resultantLength2 = textField.text.length + string.length - range.length;

        NSLog(@"Length After Additions And Subtractions Will Be: %i letters", resultantLength2);

        if ([_confirm.text isEqualToString: _password.text] || resultantLength2 < 3) {
            textField.textColor = [UIColor redColor];
            [_next setEnabled:NO];

        }else{
            [_next setEnabled:YES];
        }
    }
    return YES;
}

我有一个 next 按钮变得无法使用

2 个答案:

答案 0 :(得分:3)

我们实际想要做的是在文本更改后比较文本字段中的字符串,但是目前,我们正在使用在文本更改之前触发的方法并询问更改是否正常。< / p>

我们可以在这种方法中做一些技巧,让它正常工作,但为什么不在它们改变后检查它们呢?

在视图控制器的viewDidLoad中,添加以下两行:

[_confirm addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
[_password addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

现在添加textFieldDidChange:方法来比较文本字段中的值。

- (void)textFieldDidChange:(UITextField *)textField {
    if (![_confirm.text isEqualToString: _password.text]) {
        textField.textColor = [UIColor redColor];
        [_next setEnabled:NO];
    } else {
        [_next setEnabled:YES];
    }
}

答案 1 :(得分:0)

您的问题是您在shouldChangeCharactersInRange,在更新文本字段之前调用,但您正在比较_confirm.text

当前

此外,您的字符串比较逻辑似乎是错误的方法 - 如果密码与我想的确认相同,您希望启用NEXT

我会尝试这个 -

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {



if (textField == _confirm) {

        NSMutableString *newValue=[NSMutableString stringWithString:textField.text];
        [newValue replaceCharactersInRange:range withString:string];

        int resultantLength2 = newValue.length;

        NSLog(@"Length After Additions And Subtractions Will Be: %i letters", resultantLength2);

        if (([newValue isEqualToString: _password.text] == NO) || resultantLength2 < 3) {
            textField.textColor = [UIColor redColor];
            [_next setEnabled:NO];

        }else{
            textField.textColor = SOMETHING; // should reset text colour
            [_next setEnabled:YES];
        }
    }
    return YES;
}