我遇到了尝试在我的UISearchDisplayController
和表格视图控制器中显示搜索结果的问题。
我有REST API服务器端点用于获取搜索结果,我在用户单击“搜索”按钮时发送请求并尝试将项目数组填充到搜索显示控制器中。不幸的是控制器表现得非常奇怪..
以下是我的表视图控制器的代码,在 viewDidLoad 方法中我初始化搜索:
LSDropdownViewController *menuCtrl = (LSDropdownViewController *)[self parentViewController];
[self setSearchBar:menuCtrl.topSearchBar];
[self.searchBar setDelegate:self];
[self.searchBar setBackgroundColor:[UIColor clearColor]];
[self.searchBar setBackgroundImage:[UIImage imageWithGradientColors]];
// set search cancel button color
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor whiteColor]];
self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:menuCtrl.topSearchBar contentsController:self];
[self.searchController setDelegate:self];
[self.searchController setSearchResultsDataSource:self.tableView.dataSource];
[self.searchController setSearchResultsDelegate:self.tableView.delegate];
我点击请求如下:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
MyHTTPClient *api = [MyHTTPClient create];
[api searchPopularCollectionsByText:searchBar.text success:^(AFHTTPRequestOperation *operation, id collections) {
[self.searchResults removeAllObjects];
NSArray *data = [collections objectForKey:@"data"];
if ([data count] > 0) {
NSMutableArray *result = [[NSMutableArray alloc] init];
for (NSDictionary *collectionData in data) {
LSCollection *collection = [[LSCollection alloc] initWithDictionary:collectionData];
[result addObject:collection];
}
[self.searchResults addObjectsFromArray:result];
[self.searchController.searchResultsTableView reloadData];
[result removeAllObjects];
result = nil;
}
} failure:nil];
}
如果响应包含项目数组,我在searchResults
数组中填充它,在其他方法中我检查正确的数据数组(例如在cellForRowAtIndexPath
中):
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"collectionCell" forIndexPath:indexPath];
LSCollection *collection;
if (tableView == self.searchController.searchResultsTableView) {
collection = [self.searchResults objectAtIndex:indexPath.row];
} else {
collection = [self.collections objectAtIndex:indexPath.row];
}
...
但是看看截屏视频,有时searchResults
没有填充..
视频 http://screencast.com/t/enImJQuA
更多具有搜索结果位置的表格视图不固定,您也可以向下滚动到原始列表。
这可能有什么错误?使用REST服务器处理点击搜索的正确方法是什么?
谢谢!
答案 0 :(得分:0)
tableview委托方法在同一个viewcontroller中委托“searchBarSearchButtonClicked”方法吗?试试
[self.searchController setSearchResultsDataSource:self];
[self.searchController setSearchResultsDelegate:self];
如果没有工作,请告诉我有关tableview委托方法的更多信息。他们在跑吗?