UISearchBar禁用取消按钮的自动禁用

我已经将一个UISearchBar实现到了一个表视图中,除了一件小事外,几乎所有东西都在工作:当我输入文本然后按下键盘上的搜索按钮时,键盘消失,搜索结果是表中唯一显示的项目,文本保留在UISearchBar中,但取消按钮被禁用。

我一直试图让我的列表尽可能接近Apple联系人应用程序的功能,当您在该应用程序中按搜索时,它不会禁用取消按钮。

当我查看UISearchBar头文件时,我注意到了_searchBarFlags结构下的autoDisableCancelButton标志,但它是私有的。

当我设置UISearchBar时,有什么我缺少的东西?


我找到了解决方案。 您可以使用此for-loop循环搜索栏的子视图,并在键盘上按下搜索按钮时启用它。

for (UIView *possibleButton in searchBar.subviews)
{
    if ([possibleButton isKindOfClass:[UIButton class]])
    {
        UIButton *cancelButton = (UIButton*)possibleButton;
        cancelButton.enabled = YES;
        break;
    }
}

为了在iOS7中为我工作,我必须调整这一点

- (void)enableCancelButton:(UISearchBar *)searchBar
{
    for (UIView *view in searchBar.subviews)
    {
        for (id subview in view.subviews)
        {
            if ( [subview isKindOfClass:[UIButton class]] )
            {
                [subview setEnabled:YES];
                NSLog(@"enableCancelButton");
                return;
            }
        }
    }
}

有两种方法可以轻松实现

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    //  The small and dirty
    [(UIButton*)[searchBar valueForKey:@"_cancelButton"] setEnabled:YES];

    // The long and safe
     UIButton *cancelButton = [searchBar valueForKey:@"_cancelButton"];
    if ([cancelButton respondsToSelector:@selector(setEnabled:)]) {
         cancelButton.enabled = YES;
    }
}

如果Apple将在后台更改它,则应该使用第二个,它不会让应用程序崩溃。

顺便说一句,我测试从iOS 4.0到8.2,没有任何变化,我也用它在我的商店批准的应用程序没有任何问题。

链接地址: http://www.djcxy.com/p/44235.html

上一篇: UISearchBar disable auto disable of cancel button

下一篇: UISearchBar Keyboard