通常我将数据存储在数组中。然后,当调用cellForRowAtIndexPath时,我只看行,并根据行和进程选择数组上的项。
但我们所知道的UITableView可以进行组视图。
那我该怎么办?
我应该有一个数组数组吗?数组的NSDictionary?在UITableView结构中存储数据的最优雅方式是什么?
答案 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]
祝您编程愉快!如果需要进一步说明或有任何错误,请通知我。