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

我将搜索栏配置为显示结果按钮,但该按钮仅显示在用户输入字符之前。 此时,“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

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

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

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

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

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

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

希望这可以帮助。