shouldChangeCharactersInRange:方法不允许删除现有字符

use*_*195 1 iphone objective-c ipad

我目前正在限制用户写入超过4个字符的文本.

为此我正在使用这段代码

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

    if ([textField.text length] == 4)
        return NO;
    else
        return YES;    
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,不允许用户写超过4个字符.

但是当我尝试删除现有的字符时.键盘删除选项不起作用.

如何解决这个问题呢

Vla*_*mir 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;
}
Run Code Online (Sandbox Code Playgroud)