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