双击UITableView单元格应该转到以前的状态

时间:2017-05-31 09:57:20

标签: ios swift uitableview

如果我选择(单击)TableView行,它应该添加Image,表示我选择了这个特定的项目。它工作正常!

我的问题是:如果用户想要从所选项目中退回。 如果我点击同一行,它应取消选择该单元格并隐藏该图像。

我尝试的是:

func tableView (_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     return tableData.count
        }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath as IndexPath) as! leistungCell

    // Configure the cell...
    let tableData = self.tableData[indexPath.row]

    cell.leistungLbl.text = tableData["leistung_info"] as? String

    //space between Rows
    cell.contentView.backgroundColor = colorLightGray
    cell.contentView.layer.borderColor = UIColor.white.cgColor


    //space between Rows
    cell.contentView.layer.borderWidth = 3.0
    cell.contentView.layer.cornerRadius = 8

    return cell


}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {


    let cell = tableView.cellForRow(at: indexPath)


    cell?.imageView?.image = UIImage(named: "check.png")

    let value = Info["leistung_info"] as! String     

}

func tableView(_ tableView: UITableView, didDeSelectRowAt indexPath: IndexPath){

    let cell = tableView.cellForRow(at: indexPath)
    cell?.imageView?.image = nil
}

1 个答案:

答案 0 :(得分:1)

忘记并删除didDeSelectRowAt,只需使用didSelectRowAt和数组即可保存选择内容:

var selectedIndexPaths = [IndexPath]()

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath)

    if let index = selectedIndexPaths.index(of: indexPath) { //deselect it if the row is selected
        tableView.deselectRow(at: indexPath, animated: true)
        cell?.imageView?.image = nil
        selectedIndexPaths.remove(at: index)
    }
    else{ //select it if the row is deselected
        cell?.imageView?.image = UIImage(named: "check.png")
        selectedIndexPaths.append(indexPath)
    }
}

请注意细胞重新!请使用cellForRowAt方法进行相同的检查。