首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >searchDisplayController不更新UITableVIew

searchDisplayController不更新UITableVIew
EN

Stack Overflow用户
提问于 2015-06-27 05:57:03
回答 2查看 254关注 0票数 0

我有一个带有搜索栏和搜索显示控制器的UITableView。我的代码似乎是正确的,但当我输入搜索栏时,我没有得到任何结果。UITableView保持不变。

我的方法是正确的,因为它仍然正确地将数据传递给下一个VC,非常好。

如果能朝正确的方向前进,我们将不胜感激。

**注:我意识到,从searchDisplayController开始,iOS8是不可取的,但我想弄清楚这一点是为了知道。

代码语言:javascript
复制
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView == self.searchDisplayController.searchResultsTableView) {
    return [searchResults count];

} else {
    return [bands count];

}
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @"BandCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}

if (tableView == self.searchDisplayController.searchResultsTableView) {
    cell.textLabel.text = [searchResults objectAtIndex:indexPath.row];
} else {
    cell.textLabel.text = [bands objectAtIndex:indexPath.row];
}

return cell;
}

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
NSPredicate *resultPredicate = [NSPredicate
                                predicateWithFormat:@"SELF contains[cd] %@",
                                searchText];

searchResults = [bands filteredArrayUsingPredicate:resultPredicate];
}

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

return YES;
}

编辑

我注意到searchBar没有连接。当我连接它时,我注意到,每当我在搜索栏内点击时,搜索栏就会消失。看起来搜索栏在导航栏后面消失了。这是以后要讨论的另一个问题。

我仍然无法使表正确更新。

来源:来源

编辑

顺便提一句,我弄明白了为什么我的搜索栏会变坏。当我应该将导航条嵌入到选项卡栏中时,我将选项卡条嵌入到导航控制器中。

所以:选项卡->导航控制器

添加以下代码可以阻止我的搜索栏向上移动和重叠状态栏

self.definesPresentationContext = YES;

编辑

不知道为什么,但我注意到我的搜索栏/搜索控制器没有正确连接。我把它移走了,又加回去了,一切都正确地连接起来了。具体地说:

searchDisplayController没有连接到乐队列表。

EN

回答 2

Stack Overflow用户

发布于 2015-06-27 06:25:23

这个方法叫searchDisplayController的委托方法吗?--

代码语言:javascript
复制
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{

        [self filterContentForSearchText:searchString
                                   scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                          objectAtIndex:[self.searchDisplayController.searchBar
                                                         selectedScopeButtonIndex]]];
        return YES;
    }

以及在这一行中是否有数据

代码语言:javascript
复制
 searchResults = [bands filteredArrayUsingPredicate:resultPredicate];
票数 0
EN

Stack Overflow用户

发布于 2015-06-27 08:51:33

替换下面的方法。可能对你有帮助

代码语言:javascript
复制
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
NSPredicate *resultPredicate = [NSPredicate
                                predicateWithFormat:@"SELF contains[cd] %@",
                                searchText];

searchResults = [bands filteredArrayUsingPredicate:resultPredicate];
[self.tableView reloadData]; //add tableview reloadData
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31085680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档