我已经实现了UITextField委托,以防止在文本字段中输入超过一定数量的数字/字符并且它有效。问题是,在达到最大位数/字符数后,我甚至无法删除,即没有键响应甚至删除键。我该如何解决这个问题?即使输入了最大字符数,我也需要删除键才能工作。以下是我的代码:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text length] > 9) {
textField.text = [textField.text substringToIndex:10];
return NO;
}
return YES;
}
答案 0 :(得分:2)
当您点击删除按钮[string length] == 0
和range.length > 0
时,如果您将其添加到if:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text length] > 9&&!([string length] == 0 && range.length > 0)) {
textField.text = [textField.text substringToIndex:10];
return NO;
}
return YES;
}
答案 1 :(得分:1)
问题在于,如果您实际允许建议的编辑,则只考虑当前文本,而不考虑文本:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *proposedText = [textField.text stringByReplacingCharactersInRange:range withString:string];
if ([proposedText length] > 9) {
textField.text = [proposedText substringToIndex:10];
return NO;
}
return YES;
}
另外,我认为你不应该textField.text = [proposedText substringToIndex:10];
,你应该只返回no而不是做出部分改变,但这是你的选择。