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 )显示数组的主要内容,如果未能解决你的问题,请参考以下文章