我知道这可能被视为重复,但我保证不是。
每个人都给出了类似的答案:
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 按钮变得无法使用
答案 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;
}