Подтвердить что ты не робот

UICollectionView обновляет одну ячейку

Я пытаюсь обновить одну ячейку внутри UICollectionView, в частности, я просто пытаюсь обновить изображение в этой конкретной ячейке, взорванной cell.imageView. [self.collectionView reloadData] на самом деле не вариант, потому что он заставляет весь просмотр коллекции мигать. [self.collectionView beginUpdates] это не вещь в UICollectionView.

Я понимаю, что могу использовать:

[self.collectionView performBatchUpdates:^{
    //do something
} completion:nil];

Я не совсем уверен, что добавить в блок завершения для обновления определенной ячейки imageView. Все это делается внутри didSelectItemAtIndexPath. Также я не использую NSFetchedResultsController. Любые идеи?

4b9b3361

Ответ 1

- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths

Здесь это способ перезагрузить конкретный indexPaths в collectionView

Ответ 2

Ответ на Dinesh находится на месте. Но чтобы избежать нежелательных анимаций при перезагрузке (иначе говоря, "мигать" ), используйте:

BOOL animationsEnabled = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[myCollectionView reloadItemsAtIndexPaths:myIndexPaths];
[UIView setAnimationsEnabled:animationsEnabled];

Ответ 3

См. Вставка, удаление и перемещение разделов и элементов в "Руководстве по программированию коллекции для iOS":

Чтобы вставить, удалить или переместить один раздел или элемент, вы должны выполнить следующие действия:


Обновите данные в объекте источника данных. Вызовите соответствующий метод представления коллекции, чтобы вставить или удалить раздел или элемент. Крайне важно, чтобы вы обновили свой источник данных, прежде чем уведомлять коллекцию о любых изменениях. Методы представления коллекции предполагают, что ваш источник данных содержит правильные данные. Если это не так, представление коллекции может получить неправильный набор элементов из вашего источника данных или запросить элементы, которые там не существуют, и сбой вашего приложения.


Итак, в вашем случае вы должны сначала добавить изображение в источник данных просмотра коллекции, а затем вызвать insertItemsAtIndexPaths. Затем представление коллекции попросит функцию делегата источника данных предоставить представление для вставленного элемента.