2011-12-13 33 views
8

我正在为我的文本框编写验证,我发现了一些有趣的内容,可以检查我是否可以实时地在文本框中输入多少个数字。我的文本字段输入必须是8位数字。所以我想在文字区域内的文字变为绿色时,我达到8位数字,并改变颜色,当它不是。如何实时检查文本字段输入?

我该怎么做?请提前帮助,帮助我。

回答

21

使用-textField:shouldChangeCharactersInRange:replacementString:可能是一个不好的解决方案,因为它在文本字段更新之前触发。当您想在键盘自动更新文本字段之前更改文本字段的文本时,可能需要使用此方法。在这里,你可能想在编辑值变化时,简单地使用目标 - 动作配对:

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

然后,在- (void)checkTextField:(id)sender,试试这个:

UITextField *textField = (UITextField *)sender; 
if ([textField.text length] == 8) { 
    textField.textColor = [UIColor greenColor]; // No cargo-culting please, this color is very ugly... 
} else { 
    textField.textColor = [UIColor blackColor]; 
    /* Must be done in case the user deletes a key after adding 8 digits, 
     or adds a ninth digit */ 
} 
+0

这绝对是最好的解决方案。我有使用'-textField:shouldChangeCharactersInRange:replacementString:' –

+0

是的!请记住,当该方法被调用时,文本字段的文本尚未更改。 – aopsfan

+0

同意,比我见过的任何其他更好的解决方案! – jcrowson

1

设置代理的UITextField和实施方法– textField:shouldChangeCharactersInRange:replacementString:细节和例子都在UITextFieldDelegate Protocol Reference,但这里有一个简单的例子:

- (BOOL)textField:(UITextField *)textField 
shouldChangeCharactersInRange:(NSRange)range 
replacementString:(NSString *)string 
{ 
     NSString *text = [textField text]; 
     // NOT BACKSPACE 
     if ([string length] || text.length + string.length < 8) { 
      return YES; 
     } else if (text.length + string.length > 8) { 
      return NO; 
     } else { 
       // DO SOMETHING FOR LENGTH == 8 
       return YES; 
     } 
} 
3

使用UITextFieldDelegate。尤其是这个函数

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

,你可以从here示例代码的链接..

+0

接受的解决方案更好,因为@aopsfan提到:'使用-textField:shouldChangeCharactersInRange:replacementString:可能是一个不好的解决方案,因为它在文本字段更新之前触发。“因此,您失去了”实时“更新是一个字符背后(逐个)。 –

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

试试吧!

4
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string]; 

// [textField2 setText:[textField1.text stringByReplacingCharactersInRange:range withString:string]]; 
    NSLog(@"%@",searchStr); 
    return YES; 
} 
0

更新雨燕4.0

txtFieldAdd.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) 

现在调用你的函数。在我的情况下,这将启用保存按钮

@objc func textFieldDidChange(_ textField: UITextField) { 
    if (txtFieldAdd.text?.isEmpty)! { 
     btnSave.isEnabled = false 
    } 
    else { 
     btnSave.isEnabled = true 
    } 
} 

希望它有帮助。

相关问题