将表格视图转换为具有部分

Posted

技术标签:

【中文标题】将表格视图转换为具有部分【英文标题】:Converting table view to have sections 【发布时间】:2011-01-31 07:04:11 【问题描述】:

我有一个表格视图,它的数据源来自一个包含人名的数组。

现在为了方便找人,我想对表格视图进行分区,使其右侧有字母 A-Z,就像地址簿应用一样。

但我当前的数组只包含NSStrings 的集合。如何拆分它们以便按名称的第一个字母分组?有什么方便的方法吗?

编辑:如果有人对我的最终代码感兴趣:

NSMutableArray *arrayChars = [[NSMutableArray alloc] init];

for (char i = 'A'; i <= 'Z' ; i++) 
    NSMutableDictionary *characterDict = [[NSMutableDictionary alloc]init];
    NSMutableArray *tempArray = [[NSMutableArray alloc] init];

    for (int k = 0; k < [myList count]; k++) 

        NSString *currentName = [[friends objectAtIndex:k] objectForKey:@"name"];
        char heading = [currentName characterAtIndex:0];
        heading = toupper(heading);

        if (heading == i) 
            [tempArray addObject:[friends objectAtIndex:k]];
        
    
    [characterDict setObject:tempArray forKey:@"rowValues"];
    [characterDict setObject:[NSString stringWithFormat:@"%c",i] forKey:@"headerTitle"];
    [arrayChars addObject:characterDict];

    [characterDict release];
    [tempArray release];

在函数结束时,我将拥有:

arrayChars [0] = dictionary(headerTitle = 'A', rowValues = "adam", "alice", etc)
arrayChars[1] = dictionary(headerTitle = 'B', rowValues = "Bob", etc)

感谢大家的帮助!

【问题讨论】:

【参考方案1】:

您可以使用字典对它们进行排序,因此创建一个包含所有要排序的字母的数组和一个包含 nil 对象的数组来初始化字典

NSArray *names = @[@"javier",@"juan", @"pedro", @"juan", @"diego"];
NSArray *letters = @[@"j", @"p", @"d"];
NSMutableArray *objects = [[NSMutableArray alloc] init];

for (NSInteger i = 0; i < [letters count]; ++i)

    [objects addObject:[[NSMutableArray alloc] init]];


NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:objects forKeys:letters];

那么你必须找到单词的第一个字母并将该单词放入字典中的相应键中

for (NSString *name in names) 
    NSString *firstLetter = [name substringToIndex:1];

    for (NSString *letter in letters) 
        if ([firstLetter isEqualToString:letter]) 
            NSMutableArray *currentObjects = [dictionary objectForKey:letter];
            [currentObjects addObject:name];
        
    


要检查你可以直接打印字典

NSLog(@"%@", dictionary);

然后你的工作就是使用字典在 tableview 中填充你的部分

【讨论】:

以上是关于将表格视图转换为具有部分的主要内容,如果未能解决你的问题,请参考以下文章

具有多个部分的表格视图

SWIFT:在具有多个部分的表视图中显示字典时,无法将具有标识符单元格错误的单元格出列

如何使用 Swift 按字母顺序将表格视图数据划分为多个部分? (重写)

如何将带有字符串@“XYZ”的部分设置为表格视图中的第一部分

将 HTML 表单转换为 JSON 对象

是否可以实现可扩展的表头视图?