Расширение разделов таблицы при нажатии на каждый раздел - PullRequest
0 голосов
/ 10 октября 2018

У меня есть табличное представление, которое имеет 2 раздела и несколько ячеек (которые могут быть динамическими) под каждым разделом, показывающим связанные данные.

Это код, который я написал, чтобы показать данные ...

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

    if section == 0 {
      return recentUsers?.count
    } else {
      return groupNameArray?.count
    }

  }


func numberOfSections(in tableView: UITableView) -> Int {
     return 2
}




 func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    if section == 0 {
      return "  CHAT LIST"
    } else {
      return "  GROUPS"
    }
  }




 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! RecentMessageCell
    cell.tag = indexPath.row

    if indexPath.section == 0 {

        if let user = recentChatUsers?[indexPath.row] {
          cell.idLabel?.text = user.id

      }
    } else {


      if groupNameArray.isEmpty == false {
       let grpArr = groupNameArray[indexPath.row]
       cell.userNameLabel?.text = grpArr.grpname
      }
    }

    return cell
  }

Теперь я хочу достичь, если я нажму на первый раздел, он должен развернуться и показатьячейки, которые он содержит, и то же самое должно произойти и со второй ячейкой.Повторное нажатие на каждый из этих разделов должно скрыть развернутые ячейки.

Я действительно искал решения в Интернете.Но хотя ресурсы были доступны, я не смог найти много помощи для моей проблемы ...

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Для такого рода функций требуется немного больше кода, и я не могу написать здесь весь код, но я могу объяснить вам концепции, которые будут использоваться для достижения этой цели, и приложу несколько хороших руководств, которые я использовал для создания такой функции, какthis


  1. Сначала вам нужно создать custom HeaderView для ваших секций
  2. Далее вам нужно UITapGestureRecognizer в вашем разделе и вам нужно написать свой логин внутри функции , предоставленной в action части UITapGestureRecognizer конструктора
Вам нужно создать отдельный Protocol внутри вашего HeaderView файла, и ваш ViewController, содержащий ваш TableView, примет этот протокол и будет обрабатывать, развернуть или свернуть ваши строки
Кроме того, вам нужно будет создать отдельный экземпляр Struct для каждого раздела , который будет содержать boolean variable, который будет указывать, будет ли этот раздел развернут или свернут

Это базовая концепция, которая понадобится при создании Expandable List в iOS.

Ниже я привел ссылки на некоторые учебные пособия:

Учебное пособие 1

Учебное пособие 2

Учебное пособие 3

Учебное пособие 4

0 голосов
/ 10 октября 2018

Добавление массива для отслеживания расходов на разделы / свертывания

let sectionStats = [Bool](repeating: true, count: 2)

Добавление a, IBAction к ответу раздела отслеживания, обновление значения sectionStats для соответствующего раздела и перезагрузка раздела

и обновите numberOfRowsInSection, как показано ниже

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        guard sectionStats[section] else {
            return 0
        }

        if section == 0 {
            return 1
        } else {
            return list.count
        }
    }

Заголовок Tappable:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return headerView(section: section, title: section == 0  ? "CHAT LIST" : "GROUPS")
}

private func headerView(section: Int, title: String) -> UIView {
    let button = UIButton(frame: CGRect.zero)
    button.tag = section
    button.setTitle(title, for: .normal)
    button.setTitleColor(UIColor.red, for: .normal)
    button.addTarget(self, action: #selector(sectionHeaderTapped), for: .touchUpInside)

    return button
}

@objc private func sectionHeaderTapped(sender: UIButton) {
    let section = sender.tag
    sectionStats[section] = !sectionStats[section]
    tableView.beginUpdates()
    tableView.reloadSections([section], with: .automatic)
    tableView.endUpdates()
}

Хороший учебник по Как создать табличное представление со складными секциями :https://medium.com/ios-os-x-development/ios-how-to-build-a-table-view-with-collapsible-sections-96badf3387d0

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