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. Представление коллекции затем попросит функцию делегата источника данных предоставить представление для вставленного элемента.