UITableView在分组模式下的优秀数据结构是什么

时间:2013-11-26 12:18:58

标签: objective-c uitableview

通常我将数据存储在数组中。然后,当调用cellForRowAtIndexPath时,我只看行,并根据行和进程选择数组上的项。

但我们所知道的UITableView可以进行组视图。

那我该怎么办?

我应该有一个数组数组吗?数组的NSDictionary?在UITableView结构中存储数据的最优雅方式是什么?

3 个答案:

答案 0 :(得分:10)

例如一个字典数组,其中每个字典都包含 标题和一个部分的所有项目:

NSArray *dataSource = @[
                    @{@"title": @"Section 0",
                      @"rows" : @[ item00, item01, item02] },
                    @{@"title": @"Section 1",
                      @"rows" : @[ item10, item11, item12] },
                    @{@"title": @"Section 2",
                      @"rows" : @[ item20, item21, item22] },
                    ];

项目可以是自定义类的字符串或对象。然后你可以 访问cellForRowAtIndexPath中的每个项目,如

Item *item = dataSource[indexPath.section][@"rows"][indexPath.row];

并且所有其他数据源方法也很容易实现。

答案 1 :(得分:0)

@Martin对Objective-C的回答是正确的,但在Swift中,我们没有为字典提供变量types的奢侈。类型是预定义的。

我们需要使用struct或自定义数据类型来解决。

struct Model<Item>{
  let title: String
  let rows: [Item]

  subscript(index: String) -> [Item] {
    get {
      return rows
    }
  }
}

let model1 = Model(title: "Secton 0", rows: ["A", "B", "C"])
let model2 = Model(title: "Secton 1", rows: ["D", "E", "F"])

let dataSource = [model1, model2]

// You can query
dataSource[indexPath.section][rows][indexPath.row]

答案 2 :(得分:0)

我喜欢Swift启用的这种模式:

NULL

然后在索引路径的行中的单元格中

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.10.4
Created-By: 1.8.0_201-b09 (Oracle Corporation)
Class-Path: lib/mysql-connector-java-5.1.23-bin.jar lib/jcalendar-1.4.
 jar lib/jasperreports-6.9.0.jar lib/commons-beanutils-1.9.3.jar lib/c
 ommons-collections4-4.2.jar lib/commons-digester-2.1.jar lib/commons-
 logging-1.1.1.jar lib/groovy-all-2.4.16.jar lib/itext-2.1.7.js6.jar l
 ib/poi-4.0.1.jar lib/jfreechart-1.0.19.jar lib/UtileriaGeneral.jar li
 b/Permisos.jar lib/Oficinas.jar
Main-Class: com.ttracasa.remesas.Remesas

感谢Martin R的启发。我的实际实现使用另一种模式,我必须使用不同的单元格类和数据类型,如下所示:

let sections = [(title: "Alpha", rows: ["A", "B", "C"]),
               (title: "Numeric", rows: ["1", "2", "3"])]()

实施:

let data = sections[indexPath.section].rows[indexPath.row]

祝您编程愉快!如果需要进一步说明或有任何错误,请通知我。