Как сбросить UICollectionView в Swift - PullRequest
0 голосов
/ 14 января 2019

Я занимаюсь разработкой карточной игры с использованием UICollectionView. Я переопределяю функцию draw () UICollectionViewCell, чтобы упорядочить мои изображения при загрузке ячеек. В каждой новой игре я меняю количество карт в игре. Таким образом, количество и размер клеток меняются. Я должен сделать все операции для UICollectionView в методе viewWillAppear () из-за библиотеки третьей части, которую я использую. Мой вопрос заключается в том, как сбросить все работы, которые были сделаны через UICollectionView раньше. Я хочу очистить UICollectionView во время каждой игры без повторной загрузки UIViewController. Хочу сделать это в методе viewWillAppear () . Я хочу очистить UICollectionView, потому что мои изображения перекрываются, если в новой игре нет четкого UICollectionView.

Примечание : я удалил все подпредставления из UICollectionView, как показано ниже, но это не сработало

   let subViews = gameCollectionView.subviews

    if subViews != nil {
        for view in subViews {
            view.removeFromSuperview()
        }
    }

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Очистка коллекции - это очистка массива источника данных, например

arr = []
gameCollectionView.reloadData()

если вам нужно очистить ячейку, сделайте это внутри cellForRowAt

let cell = ///
cell.contentView.subviews//// clear here

или переопределить

override func prepareForReuse() {
 super.prepareForReuse()
 // clear any subview here
}

если вы правильно назначаете значения для всех свойств ячейки коллекции при каждом запуске cellForRowAt без добавления подпредставлений, тогда у вас не будет перекрытий

0 голосов
/ 14 января 2019

Вам необходимо удалить все подпредставления из каждой ячейки contentView, а не из представления вашей коллекции

gameCollectionView.visibleCells.forEach { $0.contentView.subviews.forEach { $0.removeFromSuperview() } }

Но я не уверен, что вам нужно переопределить метод draw. Вам лучше всего создать то, что вам нужно, только один раз, например, в awakeFromNib, а затем вам просто нужно изменить свойства ваших изображений и т. Д. В зависимости от содержимого, для этого вы можете использовать метод источника данных представления коллекции cellForItemAt.

...