在iPhone原生电话簿中 - 顶部有一个搜索字符& #字符在底部。
我想在我的表索引中添加这两个字符。
目前我已实施以下代码。
atoz=[[NSMutableArray alloc] init];
for(int i=0;i<26;i++){
[atoz addObject:[NSString stringWithFormat:@"%c",i+65]];
}
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
return atoz;
}
如何拥有#character&amp;在我的UITableView中搜索符号?
答案 0 :(得分:5)
解决这个问题的最佳方法是利用框架提供的工具。在这种情况下,您想使用UILocalizedIndexedCollation(开发人员链接)。
我还有一个这个类的装饰器,用于为您插入{{search}}图标并处理偏移。它是UILocalizedIndexedCollation的类似替代品。
我已经发布了有关如何使用此on my blog的更深入的说明。装饰者可以使用here(Gist)。
基本思想是将您的集合分组为一个数组数组,每个数组代表一个部分。您可以使用UILocalizedIndexedCollation
(或我的替代人员)来执行此操作。这是我用来执行此操作的小NSArray
类别方法:
@implementation NSArray (Indexing)
- (NSArray *)indexUsingCollation:(UILocalizedIndexedCollation *)collation withSelector:(SEL)selector;
{
NSMutableArray *indexedCollection;
NSInteger index, sectionTitlesCount = [[collation sectionTitles] count];
indexedCollection = [[NSMutableArray alloc] initWithCapacity:sectionTitlesCount];
for (index = 0; index < sectionTitlesCount; index++) {
NSMutableArray *array = [[NSMutableArray alloc] init];
[indexedCollection addObject:array];
[array release];
}
// Segregate the data into the appropriate section
for (id object in self) {
NSInteger sectionNumber = [collation sectionForObject:object collationStringSelector:selector];
[[indexedCollection objectAtIndex:sectionNumber] addObject:object];
}
// Now that all the data's in place, each section array needs to be sorted.
for (index = 0; index < sectionTitlesCount; index++) {
NSMutableArray *arrayForSection = [indexedCollection objectAtIndex:index];
NSArray *sortedArray = [collation sortedArrayFromArray:arrayForSection collationStringSelector:selector];
[indexedCollection replaceObjectAtIndex:index withObject:sortedArray];
}
NSArray *immutableCollection = [indexedCollection copy];
[indexedCollection release];
return [immutableCollection autorelease];
}
@end
所以,给定一个对象数组,例如books
,我想根据它们的名称分成几个部分(Book
类有一个name
方法),我会做这样:
NSArray *books = [self getBooks]; // etc...
UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
NSArray *indexedBooks = [books indexUsingCollation:collation withSelector:@selector(name)];