我有一个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以下,将无法再次回到它之上。我能这样做吗?
答案 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;
}