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

Ios UITextField中允许删除的最大字符数?,ios,objective-c,uitextfield,Ios,Objective C,Uitextfield,我有一个UITextField,我希望限制为30个字符。我是这样做的: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSUInteger newLength = [tex

我有一个
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;
}
目前,如果我在这些文本字段填充的表中输入两个重复的条目,我们的服务器会在末尾添加四个随机数,以防止名称重复。因此,例如,如果我输入
abc
,然后再次输入
abc
,第二个将被命名为
abc\u 8252

如果我输入两个重复的30个字符的名称,
\u 9392
仍然会被追加,使条目包含35个字符,并且上面的代码会分开,因为
replacementString
永远不会将其减少到30个字符以下

我想做的是,如果字符串是
>30个
字符,只允许使用
backspace
键,这样他们就可以将其向下移动,但不能再继续移动,一旦它下降到30以下,就不能再回到它上面。我可以这样做吗?

像这样修复了它:

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