6

我已经为我的表格视图实现了搜索栏和索引功能。工作得很好。但是,我注意到当我在搜索栏中单击时,索引仍然可用,单击它会导致不可预知的结果。而不是调试,我认为隐藏索引会更简单:)

我在其他地方找到了调用sectionIndexTitlesForSectionView和返回 nil 的参考。因此,当我单击搜索框时,searchBarTextDidBeginEditing我已明确调用[self sectionIndexTitlesForSectionView:[self tableView]].

结果是sectionIndexTitlesForSectionView确实被调用并返回 nil,但索引仍然存在。

任何想法/建议将不胜感激!托尼。

4

3 回答 3

26

- (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", @"#"];
    }
}

注意:我发现你必须self.searchDisplayController.active在 if 条件下使用。如果您使用tableView != self.tableView.

于 2012-11-26T22:16:41.487 回答
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;
}
于 2012-08-13T19:02:42.313 回答
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;
}
于 2016-06-04T09:39:14.527 回答