我为表格视图实现了搜索栏和索引功能。运作良好。但是,我注意到当我在搜索栏中单击时,索引仍然可用并单击它会导致不可预测的结果。而不是调试,我认为隐藏索引会更简单:)
我在别处找到了调用sectionIndexTitlesForSectionView
并返回nil的引用。因此,当我在搜索框中点击searchBarTextDidBeginEditing
时,我已对[self sectionIndexTitlesForSectionView:[self tableView]]
进行了明确调用。
结果是sectionIndexTitlesForSectionView
确实被调用并返回nil,但索引仍然存在。
任何想法/建议将不胜感激! 贝。
答案 0 :(得分:25)
如果您的搜索处于有效状态,则必须在- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
中返回nil,正如您在帖子中所述。然后,覆盖UISearchDisplayDelegate
中的两个方法来刷新索引。
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
[self.tableView reloadSectionIndexTitles];
}
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
[self.tableView reloadSectionIndexTitles];
}
对于sectionIndexTitlesForTableView
方法,我更喜欢使用:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
if (self.searchDisplayController.active) {
return nil;
} else {
//Add @"{search}", to beginning to add search icon to top of index
return @[@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", @"#"];
}
}
注意:我发现您必须在if条件中使用self.searchDisplayController.active
。如果您使用tableView != self.tableView
,则无效。
答案 1 :(得分:0)
在显示搜索结果时,只需让方法(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
返回nil
即可。
就我而言,这看起来像这样:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
if (tableView == [self tableView]) {
return [[NSArray arrayWithObject:UITableViewIndexSearch] arrayByAddingObjectsFromArray:[collation sectionIndexTitles]];
}
// search view, no index:
else return nil;
}
答案 2 :(得分:0)
这是一种简单的方法,如果你不想在sectionIndexTitlesForTableView中传递nil,如果你只需要为搜索文本制作一个索引,并希望将搜索文本显示为节标题。
NSArray *subViewsOfTblView = [self.tableView subviews];
if([subViewsOfTblView count] > 0)
{
UIView *indexVw = (UIView*)subViewsOfTblView[[subViewsOfTblView count] - 1];
if(isSearchON || isFilterON)
indexVw.hidden = YES;
else
indexVw.hidden = NO;
}