扩展和折叠表视图单元格时出现的问题

时间:2019-04-26 10:43:42

标签: swift tableview

我在单元格中有一个按钮和一些内容。现在,当我点击一个按钮时,我希望该单元格能够展开和折叠,这对于轻按其按钮的单元格来说效果很好。现在的问题来了,当我扩展一个单元格并尝试扩展另一个单元格,同时保持第一个单元格扩展时,它首先会关闭上一个单元格,然后扩展第二个单元格。我想并行扩展和折叠单元格,并且可以折叠任何单元格,而不是先折叠。单击按钮更改单元格的高度。这是我用于扩展和折叠的代码,

extension ActiveConsultantDetailVC : UITableViewDelegate, UITableViewDataSource

{

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return 5
}
 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0
    {
        return 100
    }
    else if indexPath.row == 1
    {
        return 80
    }
    else if indexPath.row == 2
    {
        if (flag == true && indexPath.row == indexValue)
        {
            return UITableView.automaticDimension
        }
        else
        {
            return 40
        }
    }
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
else if indexPath.row == 2
    {
        let cell = consultantTableView.dequeueReusableCell(withIdentifier: "descriptionCell", for: indexPath) as! ConsultDescriptionTVC

        indexDescription = indexPath
        cell.expandBtn.addTarget(self, action: #selector(expandDescriptionView), for: .touchUpInside )

        cell.selectionStyle = .none
        return cell
    }
}

@objc func expandDescriptionView()
{

    let cell = consultantTableView.cellForRow(at: indexDescription) as! ConsultDescriptionTVC
    indexValue = indexDescription.row

    if flag && indexValue == indexDescription.row{
        //statesDetailTableView.beginUpdates()

        self.consultantTableView.reloadRows(at: [indexDescription], with: UITableView.RowAnimation.none)
        // statesDetailTableView.endUpdates()
        cell.expandBtn.setTitle("-", for: .normal)
        flag = false
    }
    else{

        //statesDetailTableView.beginUpdates()

        self.consultantTableView.reloadRows(at: [indexDescription], with: UITableView.RowAnimation.none)
        // statesDetailTableView.endUpdates()
        cell.expandBtn.setTitle("+", for: .normal)

        flag = true
    }
}

如您所见,当我点击它时,它会调用一个函数,然后扩展单元格的高度。我的用户界面看起来像这样, enter image description here

1 个答案:

答案 0 :(得分:1)

您只需要在UITableView(在Storyboard中)中创建2个单元格。第一个单元格用于那些无法展开的单元格,第二个单元格用于展开式单元格(在这种情况下,现在您无需更改CELL的高度)

class TableVC: UITableViewController {

    // MARK:- Constants And Vars
    var isCellNAME1Expanded = false
    var isCellNAME2Expanded = false
}

class TableVC: UITableViewDataSource, UITableViewDelegate {

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

            let cell = tableView.dequeueReusableCell(withIdentifier: "simpleCell", for: indexPath) as! SideMenuBasicTableViewCell
            switch indexPath.row {
            case 0:
                cell.itemName.text = "HOME"
                break
            case 1:
                cell.itemName.text = "About Us"
                break
            case 2:
                if(isCellNAME1Expanded){
                    //expandedCell
                    let cell = tableView.dequeueReusableCell(withIdentifier: "expandedCell", for: indexPath) as! SideMenuBasicTableViewCell
                    cell.itemName.text = "Expanded- CEll1"
                    return cell
                }else{
                    cell.arrowDownImageView.isHidden = false
                    cell.itemName.text ="Expanded- CEll1"
                }
                break
            case 3:
            if(isCellNAME2Expanded){
                //expandedCell
                let cell = tableView.dequeueReusableCell(withIdentifier: "expandedCell", for: indexPath) as! SideMenuBasicTableViewCell
                cell.itemName.text = "Expanded- CEll2"
                return cell
            }else{
                cell.arrowDownImageView.isHidden = false
                cell.itemName.text = "Expanded- CEll2"
            }
            break
            case 4:
                cell.itemName.text = "Portfolio"
                break
            case 5:
                cell.itemName.text = "Contacts8"
                break
            default:
                break
            }
            return cell
        }

     //And in `DidSelectRow` Method
     override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

            if(indexPath.row == 2){
                if(isCellNAME1Expanded){
                    isCellNAME1Expanded = false
                    tableView.reloadRows(at: [indexPath], with: .none)
                }else{
                    isCellNAME1Expanded = true
                    tableView.reloadRows(at: [indexPath], with: .none)
                }
            }if(indexPath.row == 3){
                if(isCellNAME2Expanded){
                    isCellNAME2Expanded = false
                    tableView.reloadRows(at: [indexPath], with: .none)
                }else{
                    isCellNAME2Expanded = true
                    tableView.reloadRows(at: [indexPath], with: .none)
                }
            }else if(indexPath.row == 0){
                // Handle it yourself
            }else if(indexPath.row == 1){
                // Handle it yourself
            }else if(indexPath.row == 4){
                // Handle it yourself
            }else if(indexPath.row == 5){
                // Handle it yourself
            }
        }

    }