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

Posted

技术标签:

【中文标题】Swift 5. 从第二个表格视图单元格(第二个 indexpath.row )显示数组【英文标题】:Swift 5. Display array from the 2nd tableview cell ( 2nd indexpath.row ) 【发布时间】:2022-01-18 20:18:17 【问题描述】:

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

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

表格视图类

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 类

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

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

【问题讨论】:

【参考方案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])

【讨论】:

非常感谢您的故障【参考方案2】:

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

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

所以你必须减去 1

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

【讨论】:

成功了,,,谢谢

以上是关于Swift 5. 从第二个表格视图单元格(第二个 indexpath.row )显示数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将单独的 xib 单元格注册到多个表格视图?

单元格未填充在表格内的第二个集合视图中

多个自定义 UITableViewCell 相互覆盖 Swift

从第二个视图返回到一个视图时 UIButton 不可点击

iPad 搜索显示控制器从第二个单元格开始显示结果

在 CollectionView 中添加第二个自定义单元格 - Swift