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

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

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

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

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

3 ответа

Решение

- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths

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

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

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

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

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


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


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

Другие вопросы по тегам