iOS7中导航栏中的搜索栏

时间:2013-11-14 14:38:15

标签: uisearchbar uisearchdisplaycontroller

我有一个包含所有国家及其旗帜的tableview。我一直在努力添加一个搜索栏,直到我决定将搜索栏移动到iOS7允许的导航栏中(为了我的目的,这种布局非常有效)。

现在,表格加载正常,搜索栏显示正常。当我输入搜索栏时,我可以看到通过控制台构建的过滤列表。一切看起来都不错,除了搜索结果表永远不会显示。换句话说,我没有在新的tableview中看到过滤后的列表。

正在调用此方法来构建筛选列表:

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope

但标准方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

永远不会被召唤。

正如我所说,当搜索栏不在导航栏中时,它工作正常。我在ViewDidLoad中分配了以下代理和属性:

searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;

searchDisplayController.displaysSearchBarInNavigationBar = YES;

我也有:

#pragma mark - UISearchDisplayController Delegate Methods
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
// Tells the table data source to reload when text changes
[self filterContentForSearchText:searchString scope:
 [[searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[searchDisplayController.searchBar selectedScopeButtonIndex]]];
// Return YES to cause the search result table view to be reloaded.
return YES;

}

我缺少什么?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。如果我使用self.tableView.tableHeaderView = mySearchBar;

将搜索栏添加到tableHeaderView,一切正常

发现一些有趣的东西:source-tableview没有正确调整大小,所以它覆盖了result-tableview。

我的应用程序是通用的。如果我在iPad上运行它,源表视图完全被覆盖,所以我没有看到结果表视图。但在iPhone上看起来像这样:

enter image description here

答案 1 :(得分:1)

我遇到了与Morpheus相同的问题,这是因为我的viewDidLoad中有self.edgesForExtendedLayout = UIRectEdgeNone;