为什么TableView高亮显示两个按钮?

时间:2019-01-28 20:54:39

标签: swift uibutton tableview

我的应用程序中有一个基本的TableView,它显示了本地JSON文件中的一些数据。 TableView有超过 50个单元格。为了确定每个单元格,我在TableView单元格中添加了一个UIButton,并在按钮突出显示时向其添加了图像。每次点击后,UIButton都会调用

print(sender.tag)

,并用图像突出显示。到目前为止,一切都很好。一切正常。但是我注意到,例如,当使用带有标签2的UIButton时,第十个UIButton也会高亮显示。这意味着:点击带有标签3的按钮,带有标签132333 ...的按钮也会突出显示。

我不知道可能是什么问题。为了解决该问题,我尝试用标签值突出显示按钮,但这无济于事

let tempButton = viewWithTag(sender.tag) as? UIButton
tempButton?.isSelected = true

小注:每个第十个UIButton的UIButton和CALayer值相同。

Screenshot

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)
    }
}

1 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为UITableView重用了UITableViewCell。因此,当出现下一个项目时,您的UITableView使用具有先前配置的单元格。您必须保留所选按钮的记录,并使其在cellForRowAt indexpath方法中处于选中状态和未选中状态。 如果您只想突出显示一个单元格,则可以使用变量存储indexPath,并在cellForRowAt indexpath中设置所选按钮。 如果要突出显示多个按钮,则可以使用MutableArray