TableView didSelect行问题

时间:2018-10-08 12:46:09

标签: ios swift uitableview

所以问题在于,当点击一个单元格时,将显示所需的数据,而当再次点击同一单元格时(将再次显示所需的数据)。

但是,当选择一个单元格并再次选择另一个单元格时(则显示了第二个被轻击的单元格的数据,但第一个单元格未被取消选择)。

我该如何解决这个问题?

var selectedIndex = -1

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    UIView.animate(withDuration: 1) {
        self.labelViewHeightConstraint.constant = 60
        self.labelLeadingConstraint.constant = 136
        self.view.layoutIfNeeded()
    }


    let cell = tableView.cellForRow(at: indexPath) as! CustomCell
    if(selectedIndex == indexPath.row) {
        selectedIndex = -1
            print("deselect")
        UIView.animate(withDuration: 0.4) {

            cell.secondView.isHidden = true
            cell.firstView.backgroundColor =  UIColor(red: 0.8588, green: 0.84705, blue: 0.8745, alpha: 1.0)
        }
    } else {
        cell.secondView.isHidden = false
    }
        self.expandTableView.beginUpdates()
        //self.expandTableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic )
        self.expandTableView.endUpdates()
    }

2 个答案:

答案 0 :(得分:0)

您必须禁用多个选择,

self.tbl.allowsMultipleSelection = false

并启用单项选择,

self.tbl.allowsSelection = true

编辑:-

如果您要访问旧的(选定的单元格),则应拨打这样的电话

    //first assign tag or indexPath in Cell,
    cell.tag = indexPath.row
    // or
    cell.indexPath = indexPath

    //then fetch like bellow, 
    let visibleCell = tableView.visibleCells.filter({$0.tag == self.selectedIndex})
    //or
    let visibleCell = tableView.visibleCells.filter({$0.indexPath.row == self.selectedIndex})

    //if you use ,
        let cell = tableView.cellForRow(at: indexPath) as! CustomCell
    //then it will get you new cell object.

答案 1 :(得分:0)

您可以通过设置belwo之类的tableView属性来归档单个选择

tableView.allowsMultipleSelection = false

这也可以在Attributes Inspector中完成 enter image description here

希望这会有所帮助