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

Ios 如何检查两个文本字段是否相同?,ios,objective-c,Ios,Objective C,我知道这可能被认为是重复的,但我向你保证不是 每个人都给出了类似的答案: if ([_confirm.text isEqualToString: _password.text] || resultantLength2 < 3) { textField.textColor = [UIColor redColor]; [_next setEnabled:NO]; }else{ [_next setEnab

我知道这可能被认为是重复的,但我向你保证不是

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

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

        }else{
            [_next setEnabled:YES];
        }
}
if([\u confirm.text IsequalString:\u password.text]| | resultLength 2<3){
textField.textColor=[UIColor redColor];
[_nextsetenabled:否];
}否则{
[_NextSetEnabled:是];
}
}
那么为什么这不起作用呢

- (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;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串{
如果(文本字段==| |文本字段==|密码){
int resultantLength2=textField.text.length+string.length-range.length;
NSLog(@“加减后的长度为:%i个字母”,结果长度为2);
if([[u confirm.text IsequalString:_password.text]| | resultLength 2<3){
textField.textColor=[UIColor redColor];
[_nextsetenabled:否];
}否则{
[_NextSetEnabled:是];
}
}
返回YES;
}

我有一个“下一步”按钮被禁用,问题是您处于
shouldchangeCharactersRange
,该按钮在文本字段更新之前调用,但您正在比较_confirm.text的当前值

此外,您的字符串比较逻辑似乎是错误的——如果密码与我认为的确认密码相同,您希望启用下一个

我想试试这个-

- (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;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串{
如果(文本字段==\u确认){
NSMutableString*newValue=[nsmutablestringwithstring:textField.text];
[newValue ReplaceCharactersRange:range with string:string];
int resultantLength2=newValue.length;
NSLog(@“加减后的长度为:%i个字母”,结果长度为2);
if(([newValue IsequalString:_password.text]==NO)| | resultLength 2<3){
textField.textColor=[UIColor redColor];
[_nextsetenabled:否];
}否则{
textField.textColor=SOMETHING;//应该重置文本颜色
[_NextSetEnabled:是];
}
}
返回YES;
}

您的问题是您处于
shouldchangeCharactersRange
中,在更新文本字段之前调用该字段,但您正在比较_confirm.text的当前值

此外,您的字符串比较逻辑似乎是错误的——如果密码与我认为的确认密码相同,您希望启用下一个

我想试试这个-

- (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;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串{
如果(文本字段==\u确认){
NSMutableString*newValue=[nsmutablestringwithstring:textField.text];
[newValue ReplaceCharactersRange:range with string:string];
int resultantLength2=newValue.length;
NSLog(@“加减后的长度为:%i个字母”,结果长度为2);
if(([newValue IsequalString:_password.text]==NO)| | resultLength 2<3){
textField.textColor=[UIColor redColor];
[_nextsetenabled:否];
}否则{
textField.textColor=SOMETHING;//应该重置文本颜色
[_NextSetEnabled:是];
}
}
返回YES;
}

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

我们可以在这个方法中使用一些技巧使其正常工作,但是为什么不在值发生更改后检查它们呢

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

[_confirm addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
[_password addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
现在添加
textFieldDidChange:
方法来比较textfield中的值

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

我们实际上想做的是在文本更改后比较文本字段中的字符串,但目前,我们使用的方法是在文本更改前激发的,并询问更改是否正常

我们可以在这个方法中使用一些技巧使其正常工作,但是为什么不在值发生更改后检查它们呢

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

[_confirm addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
[_password addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
现在添加
textFieldDidChange:
方法来比较textfield中的值

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


它到底是怎么不起作用的?到底发生了什么,与预期的相反?如果textField和_confirm是两个不同的uitextfield,您的if()块将永远不会执行!您的文本字段的委托设置好了吗?@RobP很有可能
textfield
\u confirm
经常是同一个文本字段。@nhgri如果视图控制器设置为“是”?它到底是如何工作的?到底发生了什么,与预期的相反?如果textField和_confirm是两个不同的uitextfield,您的if()块将永远不会执行!您的文本字段的代理设置好了吗?@RobP很有可能
textfield
\u confirm
经常是同一个文本字段。@nhgrif视图控制器是吗?非常感谢您,除了文本颜色外,这还有效?!哪种文字颜色?红色的还是什么的?你需要用普通的文本颜色替换一些东西,可能是[UIColor blackColor],但我不确定你用的是什么颜色,但我不太清楚你到底看到了什么?我刚刚尝试在
shouldChangeCharactersInRange:
方法中修改textColor,但它工作正常。这是在iOS 7.1上,我已经更改了烟熏方法,但它只是停留在
[UIColor blackColor]非常感谢你,除了文字颜色之外,这还能用吗?!哪种文字颜色?红色的还是什么的?你可能需要用正常的文本颜色替换一些东西