UISearchController + ResultsController - 手动数据重新加载

时间:2015-11-17 20:15:27

标签: ios objective-c uitableview uisearchcontroller

我正在使用UISearchController和一个子类UITableViewController作为我的结果控制器来对Internet上的REST API执行搜索查询。

我没有使用updateSearchResultsForSearchController委托方法过滤结果,而是希望用户能够输入查询,在键盘上按“go”,然后在结果控制器中显示返回的结果。

执行查询后,我能够让结果控制器加载我的结果,但是当我要求时,表视图不会重新加载数据。相反,我必须向下拖动tableview才能正确重新加载。

我的问题是 - 有没有办法在执行查询后强制结果控制器手动刷新?我试着调用[self.searchcontroller.searchresultscontroller.tableVIew reloadData]但是无法正确加载结果数组。

搜索控制器设置代码

//Setup search controller
_resultsController = [[RxLookupResultsViewController alloc] init];
_searchController = [[UISearchController alloc] initWithSearchResultsController:_resultsController];
[self.searchController.searchBar sizeToFit];
self.searchController.searchResultsUpdater = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
[self.searchController.searchBar setReturnKeyType:UIReturnKeyGo];

self.resultsController.tableView.delegate = self;
self.searchController.delegate = self;
self.searchController.dimsBackgroundDuringPresentation = YES;
self.searchController.searchBar.delegate = self;
self.searchController.searchBar.tintColor = [UIColor darkTextColor];

//NSArray *scope = @[@"Scope 1", @"Scope 2"];
//self.searchController.searchBar.scopeButtonTitles = scope;
self.searchController.searchBar.showsScopeBar = NO;

self.definesPresentationContext = YES;

根据搜索栏文本执行查询后,运行以下命令:

_resultsController.filteredCodes = searchResultsDrugNames;
[_resultsController.tableView reloadData];

任何指针?我确信它的一些简单,我忽略了,可以使用一双新的眼睛。

谢谢!

1 个答案:

答案 0 :(得分:1)

Daniel Z关于在主线程上调用重载的评论是解决方案。忘了在后台线程上调用查询。