5

我已经实现了一个填充了核心数据的表,现在我试图通过显示侧面字母(以类似格式的联系人)来用部分索引它。

在下面的代码中,如果我使用注释行,我只有现有部分的字母。但我想要整个字母表,所以我改变了返回的数组:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{    
    //return [fetchedResultsController sectionIndexTitles];    

    indexArray = [NSArray arrayWithObjects: @"{search}", @"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", @"#", nil];
    return indexArray;
}

所有字母都显示在侧面索引上。但是现在我必须实现返回所选部分索引的方法,这里有一些问题:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    //return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];

    NSString *correspondingLetter = [indexArray objectAtIndex:index];
    NSUInteger correspondingIndex = [[fetchedResultsController sections] indexOfObject:correspondingLetter];

    NSLog(@"------index:%i\ncorrespondingLetter: %@\ncorrespondingIndex: %i\n", index,correspondingLetter, correspondingIndex);

    return correspondingIndex;
}

使用上面的代码,如果我使用注释行,每次选择没有相应部分的字母时都会出错。所以我想要做的是使用已选择的字母检索部分索引并将其位置搜索到现有部分中。但它不起作用。你有什么想法?

在此先感谢,亚萨

4

2 回答 2

5

你应该搜索

@property (nonatomic, readonly) NSArray *sectionIndexTitles

fetchedResultController的。
但是,如果它是一个不存在的索引,您将收到NSNotFound并且需要执行一些逻辑来返回前一个字母索引,或前一个,或前一个等。

于 2011-12-30T18:38:05.567 回答
2

为了支持其他语言,我不会使用硬编码字符。我的解决方案受到公认答案的启发:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    return [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles];
}


- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    NSString *correspondingLetter = [[[UILocalizedIndexedCollation currentCollation] sectionIndexTitles] objectAtIndex:index];
    return [[self.fetchedResultsController sectionIndexTitles] indexOfObject:correspondingLetter];
}
于 2013-10-17T22:30:59.670 回答