Неверное обновление UICollectionView - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть секция uicollectionview с вложенными ячейками, которые можно удалить при нажатии.

Моя цель состоит в том, чтобы отображать ячейки из источника данных, если они доступны, и, если нет, показывать ячейку "заполнителя", указывающую, что в настоящее время данные недоступны.

Моя проблема возникает при удалении последней оставшейся ячейки в данном разделе. Мой numberOfItemsInSection равен 1 специально для ячейки "заполнитель", но должен быть равен 0, чтобы соответствовать источнику данных 0, если больше нет данных.

Есть мысли об обходных путях?

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 3
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if sectionItems[section].count == 0 {
        return 1
    }
    else {
        return sectionItems[section].count
    }
}

func onTap() {
    self.sectionItems[indexPath.section]?.remove(at: indexPath.item)
    self.exampleCollectionView.deleteItems(at: [indexPath])
}

1 Ответ

0 голосов
/ 26 апреля 2018

Когда вы удаляете свой последний элемент, вам нужно вместо этого перезагрузить ячейку «Нет элементов». Примерно так должно работать:

func onTap() {
    sectionItems[indexPath.section]?.remove(at: indexPath.item)
    let isEmpty = sectionItems[indexPath.section]?.count ?? 0 == 0

    exampleCollectionView.performBatchUpdates({
        if isEmpty {
            self.exampleCollectionView.reloadItems(at: [indexPath])
        } else {
            self.exampleCollectionView.deleteItems(at: [indexPath])
        }
    }, completion: nil})
}

По сути, вам нужно сообщить collectionView, что после обновления после удаления последнего элемента там будет еще одна ячейка.

...