问题
Usually I store data in an array. Then, when cellForRowAtIndexPath is called I just look at row and select an item on the array based on row and process.
But UITableView as we know can do group view.
So what should I do?
Should I have an array of array? An NSDictionary of array? What would be the most elegant way to store data in UITableView structure?
回答1:
For example an array of dictionaries, where each dictionary holds the title and all items of one section:
NSArray *dataSource = @[
@{@"title": @"Section 0",
@"rows" : @[ item00, item01, item02] },
@{@"title": @"Section 1",
@"rows" : @[ item10, item11, item12] },
@{@"title": @"Section 2",
@"rows" : @[ item20, item21, item22] },
];
The items can be strings or objects of a custom class. Then you can
access each item in cellForRowAtIndexPath
like
Item *item = dataSource[indexPath.section][@"rows"][indexPath.row];
and all other data source methods are also easily implemented.
回答2:
@Martin answer is correct for Objective-C but in Swift, we don't have the luxury of having variable types
for a dictionary. The types are predefined.
We will need use struct
or custom data type to work around.
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]
来源:https://stackoverflow.com/questions/20216902/what-would-be-a-good-data-structure-for-uitableview-in-grouped-mode