2011-12-26 206 views
1

我目前限制用户写入超过4个字符的文本。shouldChangeCharactersInRange:方法不允许删除现有的字符

对于这个我使用这段代码

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

    if ([textField.text length] == 4) 
     return NO; 
    else 
     return YES;  
} 

它的做工精细,它不允许用户编写4个以上的字符。

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

如何解决这个问题

回答

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; 
} 
+0

谢谢...好的解决方案。 – 2015-06-05 07:05:36

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