如何用2个部分填充UITableView

时间:2019-06-21 00:00:54

标签: swift uitableview sections

我的问题是应该读取两个值的NumberOfRowsInSection。

let sections = ["Apples", "Oranges"]
override func numberOfSections(in tableView: UITableView) -> Int {
        return sections.count
    }



override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


//Option A)
        if apples.count & oranges.count != 0 {
           return apples.count & oranges.count
        } else {
            return 0
        }

//Option B)

        if sections[0] == "Apples" {
            return apples.count
        }

        if sections[1] == "Oranges"{
            return oranges.count
        }
        return 0
    }

这些选项都不起作用,因为在CellForRowAt上没有得到彼此的东西数量而崩溃。

另外,有人知道如何获得这些部分的标题吗?

1 个答案:

答案 0 :(得分:2)

numberOfRows将为每个节调用,因此您需要根据查询的当前节返回正确的值:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return section == 0 ? apples.count : oranges.count
}

您需要在cellForRowAt和所有其他数据源/委托方法中使用类似的模式:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", indexPath: indexPath
    if indexPath.section == 0 {
        cell.titleLabel.text = apples[indexPath.row]
    } else {
        cell.titleLabel.text = oranges[indexPath.row]
    }

    return cell
}

这是经过简化的,并作了很多假设,但它为您提供了正确的想法。

对于标题,您需要:

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
     return sections[section]
}

此答案还假定您只有基于两个数组变量的两个部分。这远非理想。您实际上应该具有一个具有所有适当结构的单一数据结构。然后,无需做任何假设。您可以添加更多的节和行,而不必更改任何表视图代码。