我的应用程序中有一个基本的TableView,它显示了本地JSON文件中的一些数据。 TableView有超过 50个单元格。为了确定每个单元格,我在TableView单元格中添加了一个UIButton,并在按钮突出显示时向其添加了图像。每次点击后,UIButton都会调用
print(sender.tag)
,并用图像突出显示。到目前为止,一切都很好。一切正常。但是我注意到,例如,当使用带有标签2
的UIButton时,第十个UIButton也会高亮显示。这意味着:点击带有标签3
的按钮,带有标签13
,23
,33
...的按钮也会突出显示。
我不知道可能是什么问题。为了解决该问题,我尝试用标签值突出显示按钮,但这无济于事
let tempButton = viewWithTag(sender.tag) as? UIButton
tempButton?.isSelected = true
小注:每个第十个UIButton的UIButton和CALayer值相同。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let chapter = arrayList[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "DataCell") as! DataCell
cell.selectionStyle = .none
return cell
}
@IBAction func markingCheck(_ sender: UIButton) {
if sender.isSelected {
sender.isSelected = false
print(sender.tag)
} else {
sender.isSelected = true
print(sender.tag)
}
}
答案 0 :(得分:0)
之所以发生这种情况,是因为UITableView
重用了UITableViewCell
。因此,当出现下一个项目时,您的UITableView使用具有先前配置的单元格。您必须保留所选按钮的记录,并使其在cellForRowAt indexpath
方法中处于选中状态和未选中状态。
如果您只想突出显示一个单元格,则可以使用变量存储indexPath
,并在cellForRowAt indexpath
中设置所选按钮。
如果要突出显示多个按钮,则可以使用MutableArray
。