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

Iphone 键盘在实现UISearchBar委托方法后没有响应,iphone,uisearchbar,uisearchbardelegate,Iphone,Uisearchbar,Uisearchbardelegate,我有一个UISearchBar,我在我的viewDidLoad:按代码实现了它。 我还设置了UISearchBarDelegate 现在我想限制用户输入超过5个字符,所以我实现了这个委托方法 - (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { NSLog(@"shouldChangeTextInRange"

我有一个
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个字符时&尝试使用键盘退格字符,它不起作用

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

我目前正在使用

XCode版本:3.2.5


iOS SDK:4.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;
}

由于代码的原因,您不能使用退格。键入5个字符后,搜索栏被卡住。改用它:

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

但是为什么searchBarSearchButtonClicked:在我到达结束字符时没有被调用?如果不实现
searchBar:shouldChangeTextInRange:
,它调用是否正确?无论如何,您可能需要
返回YES
还需要
if([text IsequalString:@“\n”])
。是的,如果我没有实现shouldChangeTextInRange,它将被调用:然后我编辑了我的答案,检查并验证它是否解决了您的问题。但是为什么searchBarSearchButtonClicked:在我到达结束字符时没有被调用?