我正在构建一个应用程序,我在UITableView中有几个部分。我目前的解决方案是在字典中收集我的数据,然后为每个部分选择一个键。有更好的解决方案吗?
答案 0 :(得分:2)
其中一个很好的方法 - 直接模型映射,尤其是快速枚举。 例如,您有2个不同的部分,其中包含3种不同类型的行。您的枚举和ViewController代码如下所示:
enum TableViewSectionTypes {
case SectionOne
case SectionTwo
}
enum TableViewRowTypes {
case RawTypeOne
case RawTypeTwo
case RawTypeThreeWithAssociatedModel(ModelForRowTypeNumberThree)
}
struct ModelForRowTypeNumberThree {
let paramOne: String
let paramTwo: UIImage
let paramThree: String
let paramFour: NSData
}
struct TableViewSection {
let type: TableViewSectionTypes
let raws: [TableViewRowTypes]
}
class ViewController: UIViewController, UITableViewDataSource {
var sections = [TableViewSection]()
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[section].raws.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let raw = sections[indexPath.section].raws[indexPath.row]
switch raw {
case .RawTypeOne:
// Here return cell of first type
case .RawTypeTwo:
// There return cell of second type
case .RawTypeThreeWithAssociatedModel(let modelForRawTypeThree):
// And finally here you can use your model and bind it to your cell and return it
}
}
}
有什么好处?强大的典型化,显式建模和各种细胞类型的显式处理。在这种情况下,你必须做的唯一简单的事情是将你的数据解析为这个枚举和结构,以及你为你的词典做的。
答案 1 :(得分:0)
这是我写的一个简单例子。请注意,它容易出错,因为它没有检查密钥是否存在,而不是创建一个合适的单元格。
您也可以使用字典执行此操作,因为您可以迭代其内容。
希望有所帮助:
class AwesomeTable: UITableViewController {
private var tableContent: [[String]] = [["Section 1, row 1", "Section 1, row 2"], ["Section 2, row 1", "Section 2, row 2"]]
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return tableContent.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableContent[section].count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
let item = tableContent[indexPath.section][indexPath.row]
cell.textLabel?.text = item
return cell
}
}
答案 2 :(得分:-1)
按如下方式实施table view datasource: -
1)在词典中设置number of sections = no键
2)No of rows in section =在索引(节)字典中的值