Как свернуть открытый раздел TableView при нажатии на другой раздел

#ios #swift

#iOS #swift

Вопрос:

Я использую раздел CollapsibleTableView, он работает, с ним все в порядке. Но мне нужно свернуть уже открытый раздел при нажатии на другой не открытый раздел.

   struct CustomCell {
     var opened = Bool()
     var title = String()
     var sectionData = [String]()
  }

 // I'm using this part inside TableView didSelectForRowAt
 if tableViewData[indexPath.section].opened {
            tableViewData[indexPath.section].opened = false
            let section = IndexSet.init(integer: indexPath.section)
            tableView.reloadSections(section, with: .none)
        } else {
            tableViewData[indexPath.section].opened = true
            let section = IndexSet.init(integer: indexPath.section)
            tableView.reloadSections(section, with: .none)
        }
  

Ответ №1:

Это код моего проекта

  @objc private func sectionTapped(recognizer:UITapGestureRecognizer) {
        print("Tapped",recognizer.view?.tag)

        guard let tag = recognizer.view?.tag else {
            return
        }

        // We have already open section 
        if let currentExpandedTag = self.sectionExpanded {

            //collapse 
            if tag == currentExpandedTag {
                self.tableView.beginUpdates()
                self.sectionExpanded = nil

                self.tableView.reloadSections(IndexSet(integer: tag), with: .fade)
                self.tableView.endUpdates()
            } else {
                // Collapse current and expand other
                self.tableView.beginUpdates()
                self.tableView.reloadSections(IndexSet(integer: currentExpandedTag), with: .fade)

                self.sectionExpanded = tag
                self.tableView.reloadSections(IndexSet(integer: tag), with: .fade)

                self.tableView.endUpdates()
                self.tableView.scrollToRow(at: IndexPath(row: 0, section: tag), at: .top, animated: true)

            }
        } else {
            // Nothing expanded
            self.tableView.beginUpdates()
            self.sectionExpanded = tag

            self.tableView.reloadSections(IndexSet(integer: tag), with: .fade)


            self.tableView.endUpdates()
        }

    }
  

Объяснение :

1) В func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? методе я установил тег для просмотра заголовка содержимого и добавил жест касания

2) У меня есть свойство в контроллере представления var sectionExpanded:Int? , которое отслеживает, какой раздел расширен

3) Другой код не требует пояснений

4) В func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int методе я проверил следующее

    if let sectionExpanded = self.sectionExpanded, section == sectionExpanded {
        return subItemCount // From your array 
    }
    return 0