搜索时UITableview不会重新加载

时间:2014-08-20 07:44:13

标签: ios objective-c uitableview uisearchbar uisearchdisplaycontroller

我的导航栏中有一个UISearchbar。当我搜索代表时:

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
    NSLog(@"Should reload");
    [self filterContentForSearchText:searchString
                               scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                      objectAtIndex:[self.searchDisplayController.searchBar
                                                     selectedScopeButtonIndex]]];

    return YES;
}

被调用所以它应该重新加载我的tableview。但事实并非如此。我的搜索数组中有两个结果,所以这不是问题。

我的UITableviewController中的init是这样的:

_searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
_searchBar.delegate = self;

_searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self];
_searchDisplayController.delegate = self;
_searchDisplayController.searchResultsDataSource = self;
_searchDisplayController.searchResultsTableView.delegate = self;

在我分配init后,我的UITableviewController执行此操作:

_poiTableView = [[POITableViewController alloc] init];
self.navigationItem.titleView = _poiTableView.searchBar;

所以搜索栏在我的导航栏中,它调用searchdislaycontroller唯一的事情是它不会重新加载我的tableview。在我将搜索栏移动到导航栏之前,它位于tableview的标题单元格中。然后它重新加载了我的tableview。我只将搜索栏移到了导航栏。

1 个答案:

答案 0 :(得分:2)

实施方法searchBarShouldEndEditing:,然后使用[tableView reloadData];

重新加载表格视图

此外,由于返回类型为BOOL,因此在方法结束时返回YES。否则,它将无法收到结束编辑委托电话。