实现UISearchBar委托方法后,键盘没有响应

时间:2011-09-06 08:09:34

标签: iphone uisearchbar uisearchbardelegate

我有UISearchBar我在我的viewDidLoad中实施:按代码。 我也设置了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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

    if ([textField.text length] + [string length] - range.length > 5) {
        return NO;
    }
相关问题