允许删除UITextField中的最大字符数?

时间:2014-01-22 15:41:17

标签: ios objective-c uitextfield

我有一个UITextField,我希望有30个字符的限制。我是这样做的:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 
                                                       replacementString:(NSString *)string
{
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 30) ? NO : YES;
}

目前,如果我在表中输入两个重复的条目,这些文本字段正在填充,我们的服务器将_1234添加到末尾,四个随机数,以防止重复的名称。因此,例如,如果我再次输入abc,然后再输入abc,则第二个将被命名为abc_8252

如果我输入两个重复的30个字符的名称,_9392仍然会被追加,会输入35个字符,上面的代码就会分崩离析,因为replacementString永远不会在30以下字符。

我想做的是,如果字符串是> 30字符,只允许backspace键,以便它们可以将其恢复,但不能使其成为任何字符串更长,一旦它降到30以下,将无法再次回到它之上。我能这样做吗?

1 个答案:

答案 0 :(得分:1)

修正如下:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 
                                                       replacementString:(NSString *)string
{
    // Allow a backspace always, in case we went over 30 due to the _1234 appending.
    const char *_char = [string cStringUsingEncoding:NSUTF8StringEncoding];
    int isBackSpace = strcmp(_char, "\b");
    if (isBackSpace == -8) {
        return YES;
    }

    // If it's not a backspace, allow it if we're still under 30 chars.
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 30) ? NO : YES;
}