Tableview单元格确实根据选择选择了行操作

时间:2019-05-15 15:26:52

标签: ios swift uitableview uibutton

我有一些问题和答案

将问题放入一个数组并回答一个数组。

我想在用户选择问题时显示,再次显示答案,然后选择关闭答案。

我编写了以下代码,但是当一个答案打开时,所有答案都关闭了,我的逻辑是相反的,任何一个plz都对我有帮助。

在这里,我创建一个带有selectedindex名称的全局变量

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "DonationTableViewCell", for: indexPath)as!
    DonationTableViewCell
    cell.questioncell.text = questnArr[indexPath.row]

    if indexPath.row  == selectedindex
    {
        cell.answerlbl.text = answersarr[indexPath.row]
        cell.questioncell.textColor = UIColor.disSatifyclr
        cell.questionimg.image = #imageLiteral(resourceName: "Drop down top icon")

    }else{
        cell.answerlbl.text = ""
        cell.questioncell.textColor = UIColor.textmaincolor
        cell.questionimg.image = #imageLiteral(resourceName: "Drop down")

    }
    tableviewheight.constant = tableview.contentSize.height

    return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    selectedindex = indexPath.row
    tableView.reloadData()
}

1 个答案:

答案 0 :(得分:1)

首先将selectedindex声明为可选IndexPath

var selectedIndexPath : IndexPath?

didSelectRowAt中,您必须执行一些检查:

  • 如果selectedIndexPath == nil选择indexPath处的行
  • 如果selectedIndexPath != nilselectedIndexPath == indexPath取消选择indexPath处的行
  • 如果selectedIndexPath != nilselectedIndexPath != indexPath取消选择selectedIndexPath的行,然后选择indexPath的行。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if selectedIndexPath == nil {
        selectedIndexPath = indexPath
        tableView.reloadRows(at: [indexPath], with: .automatic)
    } else {
        if indexPath == selectedIndexPath! {
           selectedIndexPath = nil
           tableView.reloadRows(at: [indexPath], with: .automatic)
        } else {
           let currentIndexPath = selectedIndexPath!
           selectedIndexPath = indexPath
           tableView.reloadRows(at: [currentIndexPath, indexPath], with: .automatic)
        }
    }
}

cellForRowAt中进行检查

if indexPath == selectedIndexPath