Проблема при развертывании и свертывании ячейки табличного представления - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть кнопка и некоторое содержимое в ячейке.Теперь, когда я нажимаю кнопку, я хочу, чтобы ячейка расширялась и сворачивалась, что прекрасно работает для ячейки, чья кнопка нажата.Теперь возникает проблема: когда я расширил одну ячейку и попытался расширить другую, сохранив при этом первую ячейку, то закрыл сначала первую ячейку, а затем расширил вторую ячейку.Я хочу развернуть и свернуть ячейки параллельно и могу свернуть любую ячейку, а не свернуть сначала.Я меняю высоту ячейки по нажатию кнопки.Это мой код для расширения и свертывания,

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 Ответ

1 голос
/ 26 апреля 2019

Вам просто нужно создать 2 ячейки в UITableView (в раскадровке). Первая ячейка для тех, кто не расширяется, и Вторая ячейка для расширяемой. (В данном случае теперь вам не нужно изменять высоту ячейки)

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

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...