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

时间:2011-12-26 08:47:47

标签: 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;    
}

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

但是当我尝试删除现有字符时。键盘删除选项无效。

如何解决这个问题

2 个答案:

答案 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;
}