我目前正在限制用户写入超过4个字符的文本。
为此我正在使用这段代码
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString: (NSString *)string{
if ([textField.text length] == 4)
return NO;
else
return YES;
}
它工作正常,不允许用户写超过4个字符。
但是当我尝试删除现有字符时。键盘删除选项无效。
如何解决这个问题
答案 0 :(得分:7)
当调用shouldChangeCharactersInRange方法时,文本字段仍然具有旧值,因此如果其长度为4,则会被卡住。验证输入的更好方法是计算更改后字段中的字符串,并检查它是否有效:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString: (NSString *)string{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range
withString:string];
return [newString length] <= 4;
}
答案 1 :(得分:0)
如下所示,它将起作用
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength>4) ? NO : YES;
}