UITableview 从数据数组创建字母索引

Posted

技术标签:

【中文标题】UITableview 从数据数组创建字母索引【英文标题】:UITableview create alphabetic indexing from data array 【发布时间】:2014-06-19 10:24:39 【问题描述】:

我有一个 NSMutableArray,它由一个 sqlite 查询填充,它按字母顺序返回我想在 UITableview 中显示的所有内容。

我知道想要显示您在联系人应用程序等中看到的字母索引。

但是我不确定如何设置索引并从此数组创建部分,以便每个部分都是字母表中的下一个字母。

我将如何获取我的数组并获取所需的部分和索引?

【问题讨论】:

这个问题似乎离题了,因为它在 Apple 文档中得到了解决。 @PeterDeWeese 你能发个链接吗?我找不到有关该主题的任何内容 这是一个教程:iphonedevcentral.com/indexed-uitableview-tutorial 这是苹果文档:developer.apple.com/library/ios/documentation/uikit/reference/… 还要检查 UITableViewDataSource 的文档或标题,尤其是 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView; // return list of section titles to display in section index view (e.g. "ABCD...Z#") 【参考方案1】:

假设您的带有字母的数组 (NSMutableArray myArray) 看起来像这样:

(
    
    headerTitle = V;
    rowValues =         (
                    
            id = 60;
            name = "Valley of the Giants (2)";
            "real_name" = "Valley of the Giants";
            "wine_count" = " (2)";
        
    );
,
    
    headerTitle = R;
    rowValues =         (
                    
            id = 47;
            name = "Rothbury Estate (6)";
            "real_name" = "Rothbury Estate";
            "wine_count" = " (6)";
        ,
                    
            id = 48;
            name = "Rouge Homme (4)";
            "real_name" = "Rouge Homme";
        ,
                    
            id = 45;
            name = "Rawson\U2019s Retreat (7)";
            "real_name" = "Rawson\U2019s Retreat";
        ,
                    
            id = 46;
            name = "Rosemount Estate (36)";
            "real_name" = "Rosemount Estate";
        
    );
,

在表格视图中,设置节数

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    return [myArray count];

一个部分的行数:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    return [[[myArray objectAtIndex:section] objectForKey:@"rowValues"] count];

章节标题

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
    return [[myArray objectAtIndex:section] valueForKey:@"headerTitle"];

然后在 cellForRowAtIndexPath 中,您可以像这样访问您的信息

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    NSString *name= [[[[myArray objectAtIndex:indexPath.section] objectForKey:@"rowValues"] objectAtIndex:indexPath.row] valueForKey:@"name"];

    // And create your cell like you usually do...

如果您需要按字母顺序对数组进行排序,您可以这样做:

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"headerTitle" ascending:YES];
[myArray sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];

【讨论】:

以上是关于UITableview 从数据数组创建字母索引的主要内容,如果未能解决你的问题,请参考以下文章

iOS UITableView字母索引——系统自带检索栏

如何判断何时点击了 UITableView 部分索引字母?

显示 UITableView 的本地化字母索引

如何在 iOS 中按字母顺序对 MediaQuery 的 ArtistQuery 数组进行排序

将自定义对象的 NSArray 转换为按字母顺序划分的带有索引的 UITableView?

uitableview 单元格 cellForRowAtindexPath 从 swift3 中的名称中提取第一个字母