【问题标题】:Keyboard is not responding after implementing UISearchBar delegate method实现 UISearchBar 委托方法后键盘没有响应
【发布时间】:2011-11-11 02:51:54
【问题描述】:

我有一个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

【问题讨论】:

    标签: iphone uisearchbar uisearchbardelegate


    【解决方案1】:

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

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

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

    【讨论】:

    • 但是为什么 searchBarSearchButtonClicked: 在我到达结束字符时没有被调用?
    • 不实现searchBar:shouldChangeTextInRange:是否正确调用?无论如何,你可能需要return YESif ([text isEqualToString:@"\n"])
    • 是的,如果我不实现 shouldChangeTextInRange,它就会被调用:
    • 然后我编辑了我的答案,检查并验证它是否解决了您的问题。
    【解决方案2】:

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

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

    【讨论】:

    • 但是为什么 searchBarSearchButtonClicked: 在我到达结束字符时没有被调用?
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多