在UITableView中填充部分行的最佳方法是什么?

时间:2016-08-25 11:22:07

标签: ios swift uitableview dictionary

我正在构建一个应用程序,我在UITableView中有几个部分。我目前的解决方案是在字典中收集我的数据,然后为每个部分选择一个键。有更好的解决方案吗?

3 个答案:

答案 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 =在索引(节)字典中的值