我的问题是应该读取两个值的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上没有得到彼此的东西数量而崩溃。
另外,有人知道如何获得这些部分的标题吗?
答案 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]
}
此答案还假定您只有基于两个数组变量的两个部分。这远非理想。您实际上应该具有一个具有所有适当结构的单一数据结构。然后,无需做任何假设。您可以添加更多的节和行,而不必更改任何表视图代码。