我有一个UITableView
带有cellView
数组的自定义填充(参见functs),没有节。我的目标是创建一个带有列表索引(这是问题)的搜索栏(可以)。阅读了大量文档后,我计划使用以下三种方法:“ numberOfSectionsInTableView
”,“ sectionIndexTitlesForTableView
”和“ sectionForSectionIndexTitle
”
如何NSDictionnary
使用以下结构创建functs数组?
//in viewDidLoad
// Initialize the functs array
Funct *funct1 = [Funct new];
funct1.name = @"AAA";
funct1.detail = @"detail1...";
funct1.image = @"a.jpg";
Funct *funct2 = [Funct new];
funct2.name = @"BBB";
funct2.prepTime = @"detail2...";
funct2.image = @"b.jpg";
functs = [NSArray arrayWithObjects:funct, funct2, nil]; //etc.
//For Index list: one section per letter
NSString *letters = @"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.indexTitlesArray = [letters componentsSeparatedByString:@" "];
提前致谢
在这里,您有一个很好的示例项目教程。这就是您要寻找的。
这是为TableView建立索引的示例,但是对于节和行有一个很好的示例
在此示例中,此方法对您非常有用
static NSString *letters = @"abcdefghijklmnopqrstuvwxyz";
// This method returns an array of dictionaries where each key is a letter
// and each value is a group of words corresponding to the letter.
+ (NSArray *) wordsFromLetters {
NSMutableArray *content = [NSMutableArray new];
for (int i = 0; i < [letters length]; i++ ) {
NSMutableDictionary *row = [[[NSMutableDictionary alloc] init] autorelease];
char currentWord[WORD_LENGTH + 1];
NSMutableArray *words = [[[NSMutableArray alloc] init] autorelease];
for (int j = 0; j < WORD_LENGTH; j++ ) {
if (j == 0) {
currentWord[j] = toupper([letters characterAtIndex:i]);
}
else {
currentWord[j] = [letters characterAtIndex:i];
}
currentWord[j+1] = '\0';
[words addObject:[NSString stringWithCString:currentWord encoding:NSASCIIStringEncoding]];
}
char currentLetter[2] = { toupper([letters characterAtIndex:i]), '\0'};
[row setValue:[NSString stringWithCString:currentLetter encoding:NSASCIIStringEncoding]
forKey:@"headerTitle"];
[row setValue:words forKey:@"rowValues"];
[content addObject:row];
}
return content;
}
您可以从本资源中获取主要思想,但是如果您愿意,我可以修改代码。我认为效果很好
NSMutableArray *funcsArray = [NSMutableArray array];//Here you add all your functs objects
[funcsArray addObjects: funct1, funct2...];
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name"
ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [funcsArray sortedArrayUsingDescriptors:sortDescriptors];
NSMutableArray *funcsArrayOrdered = [NSMutableArray array];//Here you add all your functs objects
NSMutableArray *funcsIndexed = [NSMutableArray array];
NSMutableArray *letters = [NSMutableArray array];
NSString *currentLetter = nil;
int numItems = [funcsArrayOrdered count];
for (Funct *functObj in funcsArrayOrdered) {
NSLog(@"funct: %@", functObj.name);
numItems--;
NSString *string = userT.name;
if (string.length > 0) {
NSString *letter = [[string substringToIndex:1] uppercaseString];
if ([currentLetter length] == 0) {
currentLetter = letter;
}
if (![letter isEqualToString:currentLetter] || numItems == 0) {
if ([letter isEqualToString:currentLetter] && numItems == 0) {
[letters addObject:functObj];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:currentLetter forKey:@"headerTitle"];
[dic setValue:letters forKey:@"rowValues"];
[funcsIndexed addObject:dic];
letters = [NSMutableArray array];
}else{
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:currentLetter forKey:@"headerTitle"];
[dic setValue:letters forKey:@"rowValues"];
[funcsIndexed addObject:dic];
letters = [NSMutableArray array];
[letters addObject:functObj];
currentLetter = letter;
if (numItems == 0 && [funcsArrayOrdered count] > 1) {
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:currentLetter forKey:@"headerTitle"];
[dic setValue:letters forKey:@"rowValues"];
[funcsIndexed addObject:dic];
}
}
}else {
[letters addObject:functObj];
}
}
}
现在,您将在funcsIndexed中对字典数组进行排序
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句