1

我有一个UISearchBar我在我的viewDidLoad: by code 中实现的。我也设置了UISearchBarDelegate.

现在我想限制用户输入超过 5 个字符所以我实现了这个委托方法

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{

    NSLog(@"shouldChangeTextInRange");

    if (searchBar.text.length >= 5)
        return NO;

    return YES;
}

它工作正常。

问题是当我输入最多 5 个字符并尝试使用键盘 Backspace 字符时,它不起作用。

现在,如果我按下键盘上的搜索按钮searchBarSearchButtonClicked: 不会被调用。

我目前正在使用

XCode 版本:3.2.5

iOS SDK:4.2

4

2 回答 2

2

您应该对的文本长度进行测试(如果应用了建议的文本更改,那么您将拥有的文本长度),而不是实际的文本长度。

为此,您首先需要计算新文本:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"])
        return YES; // accept validation button

    NSString* newText = [searchBar.text stringByReplacingCharactersInRange:range withString:text];

    if (newText.length >= 5)
        return NO;

    return YES;
}
于 2011-09-06T09:03:02.113 回答
0

由于您的代码,您不能使用退格键。输入 5 个字符后,您的 searchBar 卡住了。改用它:

    if ([textField.text length] + [string length] - range.length > 5) {
        return NO;
    }
于 2011-09-06T09:03:25.193 回答