UISearchBarDelegate showsSearchResultsButton属性的正确用法是什么?

时间:2011-03-12 14:23:47

标签: ios uisearchbar

我将搜索栏配置为显示结果按钮,但该按钮仅在用户输入字符之前显示。此时,“X”取消按钮取代它。因此,如果不输入字符,搜索结果集将等于整个数据集。我希望结果按钮保持在那里,所以当用户键入足够的字符以获得较小的结果集(如5或6行)时,他们可以单击结果按钮,我的代表将被调用,我可以显示结果集。

UISearchBar * theSearchBar = [[UISearchBar alloc] 
                             initWithFrame:CGRectMake(0,0,700,40)];
theSearchBar.delegate = self;

theSearchBar.placeholder = @"What are you looking for?";
theSearchBar.showsCancelButton = NO;         // shows up after first char typed.
theSearchBar.showsSearchResultsButton = YES; // disappears just when I need it.

...在VC中向下......这个方法只能在搜索栏的输入字段为空时调用。

 - (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar {
         NSLog(@" searchBarResultsListButtonClicked for %@",searchBar); // 
    }

建议,教程,示例代码和合理的dope-slaps欢迎。 TIA -Mike

2 个答案:

答案 0 :(得分:12)

@Rayfleck,我认为你根本不用担心搜索结果按钮。

如果你需要的是监控用户的输入,直到输入足够的字符进行过滤:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
    if ([searchText length]>5) {
        [self filterDataWithKeyword:searchText];
        [self.tableView reloadData];
    } else {
        [self resetFilter];
        [self.tableView reloadData];
    }
}

答案 1 :(得分:0)

以下是您可以在viewDidLoad中找到的部分答案。它应该隐藏清除按钮,但它不会保持结果按钮可见。我不确定结果按钮视图逻辑是如何在幕后控制的。

for (id subview in mySearchBar.subviews) {
  if ([[subview class] isSubclassOfClass:[UITextField class]]) {
    [subview setClearButtonMode:UITextFieldViewModeNever];
    break;
  }
}

由于此方法使用所有公共API,因此您的应用不应被拒绝。虽然如果/当Apple决定改变UISearchBar的层次结构时,这种方法可能会更容易被打破。我正在做的就是寻找UITextField或子类并设置它的clearButtonMode。

希望这有帮助。