我有一个自定义的UISearchBar,我希望在self.navigationItem.titleView中显示。我没有问题,在那里看到我希望它的方式,但我认为我与UISearchDisplayController的连接方式有问题。
这是viewDidLoad中的UISearchBar和UISearchDisplayController:
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0,0.0,200.0, 22.0)];
searchBar.barStyle = UISearchBarStyleDefault;
searchBar.showsCancelButton = NO;
searchBar.placeholder = @"Search";
searchBar.delegate = self;
self.navigationItem.titleView = searchBar;
searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDelegate = self;
searchDisplayController.searchResultsDataSource = self;
此时搜索功能实际上并不起作用。如果我添加[searchDisplayController setDisplaysSearchBarInNavigationBar:YES];
,搜索功能现在可以正常运行,但它会混淆我添加到searchBar
的所有样式。
编辑:附加信息:看起来[self.searchDisplayController.searchResultsTableView reloadData];
未被调用。我实施了以下内容:
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
出于某种原因,如果我不调用[searchDisplayController setDisplaysSearchBarInNavigationBar:YES];
,则不会重新加载数据。也许我错过了一种方法。
在搜索时看起来- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
被调用且tableView == self.searchDisplayController.searchResultsTableView
为真,但它不会继续调用- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
答案 0 :(得分:1)
嗯,我觉得让它发挥作用的唯一方法是将UISearchBar嵌入到UIView中,我现在可以使用它的风格,虽然我已经能够完全相同。