Swift 5. 显示来自第二个表格视图单元格的数组(第二个 indexpath.row)

Swift 5. Display array from the 2nd tableview cell ( 2nd indexpath.row )

我有一个包含 2 个原型单元格的 3 行表格视图。第一个原型单元只有一个视图。第二个原型单元有一个按钮。 第一个原型单元格只有 1 行,也是第一个 indexpath.row 第二个原型单元格有 2 行。 (第二和第三 indexpath.row )

我想将我的模型(数组)与第 2 行和第 3 行合并。但是应用程序崩溃并显示超出范围。

表格视图class

let modelArray = [phone, remote]

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1 + modelArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> 
UITableViewCell {
if indexPath.row < 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: "CELL1", for: 
indexPath) as! CELL1
cell.view.backgroundColor = .red
return cell
}
let cell2 = tableView.dequeueReusableCell(withIdentifier: "CELL2", for: indexPath)  
CELL2

这是我收到超出范围错误的地方。 (我也试过没有 + 1 )

cell2.configure(title: modelArray[indexpath.row + 1])
return cell2
}

CELL2 class

@IBOutlet weak var buttonName: UIButton!
private var title: String = ""

func configure(title: String) {
self.title = title
buttonName.setTitle(title, for: .normal)
}

请看逻辑:cellForRow 被调用了 3 次 (1 + 2),但数组中索引 3 处没有项(没有 +1 时索引 2 处也没有)。

根据代码,indexPath.row == 1 处的单元格应该显示数组中的第一项(索引 0),indexPath.row == 2 处的单元格应该显示第二项(索引 1)。

所以你必须减去 1

cell2.configure(title: modelArray[indexpath.row - 1])

因为您的 modelArray 只有 2 个元素,而您正在尝试获取第 3 个元素值。

假设当 indexPath 为 0 时,tableview 呈现 CELL1,当 indexPath 递增时,我们可以说当 indexPath 为 1 时,您得到来自您的 modelArray 的值如下所示:

cell2.configure(title: modelArray[indexpath.row + 1])

这是获取值 modelArray[1+1],在 modelArray[2] 中转换,但 modelArray 不包含 modelArray[2],它只有 0 和 1 个元素。

尝试从当前 indexPath 中减去 1。

cell2.configure(title: modelArray[indexpath.row - 1])