iOS Свернуть / развернуть разделы, щелкнув другой раздел в TableView - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть вопрос о том, чтобы развернуть / свернуть раздел табличного представления. В Интернете есть много информации об этой теме, но мой вопрос немного отличается.

Мой вопрос: как создать дополнительный раздел, когда пользователь нажимает на другой раздел?

Следующие изображения могут помочь вам понять мою ситуацию.

enter image description here

В верхней части табличного представления есть один небольшой раздел (раздел 0).

Если я коснусь этого ...

enter image description here

Разделы 1 и 2 должны быть созданы между разделами 0 и 3.

Как я могу это сделать? Есть ли способ или код? Пожалуйста, помогите мне.

Кроме того, я попробовал этот код, но получил ошибку sigabrt: (

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    self.tableView.beginUpdates()

    let indexSet = NSMutableIndexSet()
    indexSet.add(indexPath.section + 1)
    indexSet.add(indexPath.section + 2)

    if indexPath.section == 0 {
        if expandCol == true {
            self.tableView.deleteSections(NSIndexSet(index: 1) as IndexSet, with: .automatic)
            self.tableView.deleteSections(NSIndexSet(index: 2) as IndexSet, with: .automatic)
            expandCol = !expandCol
        } else {
            self.tableView.insertSections(NSIndexSet(index: 1) as IndexSet, with: .automatic)
            self.tableView.insertSections(NSIndexSet(index: 2) as IndexSet, with: .automatic)
            expandCol = !expandCol
        }
    }

    self.tableView.endUpdates()
    self.tableView.reloadData()
}

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Чтобы добавить новый раздел в UITableView, вам нужно

1 - обновить данные.Например, вставьте свои секции в массив данных или измените их флаги видимости.

2 - вызовите следующий метод.

tableView.insertSections([1, 2], with: .automatic)

или

tableView.reloadData()

Первый метод обновит ваш UITableView с анимацией.Второй обновит его мгновенно.Для лучшего UX я бы порекомендовал вам использовать первый.

Обновление вашего кода

Сначала вы можете передать все индексы разделов одновременно, используя простуюмассив.Вот так

if expandCol {
    self.tableView.deleteSections([1, 2], with: .automatic)
} else {
    self.tableView.insertSections([1, 2], with: .automatic)
}
expandCol = !expandCol

Вторая проблема заключается в том, что вы звоните reloadData после вызова анимированного обновления таблицы.

И самое главное, вам нужноизменить данные .У вас UITableView есть dataSource, и он возвращает количество разделов и ячеек.После взаимодействия пользователя с вашей триггерной ячейкой необходимо внести изменения в эти данные перед вызовом обновления.

0 голосов
/ 17 сентября 2018

Вы можете оставить переменную флага в view-controller для selectedSection.

var selectedSection: Int = -1

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return section == selectedSection ? <section-row-count> : 0
}

Установить значение флага в методе действия заголовка раздела:

func actionSectionHeader(tag: Int) {
    selectedSection = tag
    self.tableView.reloadData()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...