如何使用UISearchBar启用取消按钮?

在iPhone上的联系人应用程序中,如果输入搜索词,然后点击“搜索”按钮,键盘被隐藏,但取消按钮仍处于启用状态。 在我的应用程序中,当我调用resignFirstResponder时取消按钮被禁用。

任何人都知道如何隐藏键盘,同时保持取消按钮处于启用状态?

我使用下面的代码:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];
}

键盘滑出视图,但搜索文本字段右侧的“取消”按钮被禁用,因此我无法取消搜索。 联系人应用程序将取消按钮保持在启用状态。

我想也许有一个解决方案是深入到searchBar对象,并在实际的文本字段上调用resignFirstResponder,而不是搜索栏本身。

任何输入赞赏。


尝试这个

for(id subview in [yourSearchBar subviews])
{
    if ([subview isKindOfClass:[UIButton class]]) {
        [subview setEnabled:YES];
    }
}

此方法在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;
            }
        }
    }
}

(使用[_searchBar resignFirstResponder]之后,一定要在任何地方调用它。)


当您开始滚动表格而不是点击“搜索”按钮时,接受的解决方案将不起作用。 在这种情况下,“取消”按钮将被禁用。

这是我的解决方案,每次使用KVO禁用时,都会重新启用“取消”按钮。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // Search for Cancel button in searchbar, enable it and add key-value observer.
    for (id subview in [self.searchBar subviews]) {
        if ([subview isKindOfClass:[UIButton class]]) {
            [subview setEnabled:YES];
            [subview addObserver:self forKeyPath:@"enabled" options:NSKeyValueObservingOptionNew context:nil];
        }
    }
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    // Remove observer for the Cancel button in searchBar.
    for (id subview in [self.searchBar subviews]) {
        if ([subview isKindOfClass:[UIButton class]])
            [subview removeObserver:self forKeyPath:@"enabled"];
    }
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    // Re-enable the Cancel button in searchBar.
    if ([object isKindOfClass:[UIButton class]] && [keyPath isEqualToString:@"enabled"]) {
        UIButton *button = object;
        if (!button.enabled)
            button.enabled = YES;
    }
}
链接地址: http://www.djcxy.com/p/7701.html

上一篇: How to enable cancel button with UISearchBar?

下一篇: resign keyboard when losing focus on uisearchbar