我正在为我的文本框编写验证,我发现了一些有趣的内容,可以检查我是否可以实时地在文本框中输入多少个数字。我的文本字段输入必须是8位数字。所以我想在文字区域内的文字变为绿色时,我达到8位数字,并改变颜色,当它不是。如何实时检查文本字段输入?
我该怎么做?请提前帮助,帮助我。
我正在为我的文本框编写验证,我发现了一些有趣的内容,可以检查我是否可以实时地在文本框中输入多少个数字。我的文本字段输入必须是8位数字。所以我想在文字区域内的文字变为绿色时,我达到8位数字,并改变颜色,当它不是。如何实时检查文本字段输入?
我该怎么做?请提前帮助,帮助我。
使用-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 */
}
设置代理的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;
}
}
使用UITextFieldDelegate。尤其是这个函数
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
,你可以从here示例代码的链接..
接受的解决方案更好,因为@aopsfan提到:'使用-textField:shouldChangeCharactersInRange:replacementString:可能是一个不好的解决方案,因为它在文本字段更新之前触发。“因此,您失去了”实时“更新是一个字符背后(逐个)。 –
[textField addTarget:self action:@selector(checkTextField) forControlEvents:UIControlEventEditingChanged];
试试吧!
-(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;
}
更新雨燕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
}
}
希望它有帮助。
这绝对是最好的解决方案。我有使用'-textField:shouldChangeCharactersInRange:replacementString:' –
是的!请记住,当该方法被调用时,文本字段的文本尚未更改。 – aopsfan
同意,比我见过的任何其他更好的解决方案! – jcrowson