iOS删除密钥无响应

时间:2015-03-05 11:01:28

标签: ios objective-c

我已经实现了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;
}

2 个答案:

答案 0 :(得分:2)

当您点击删除按钮[string length] == 0range.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而不是做出部分改变,但这是你的选择。