navigationItem ios7中的自定义UISearchBar

时间:2014-09-10 16:10:13

标签: iphone ios7 styles

我有一个自定义的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

1 个答案:

答案 0 :(得分:1)

嗯,我觉得让它发挥作用的唯一方法是将UISearchBar嵌入到UIView中,我现在可以使用它的风格,虽然我已经能够完全相同。