Вот код cellForItemAtIndexPath
, который у меня есть:
static NSString *cellIdentifier = @"Cell";
MyCustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
//do stuff, set label text
if (indexPath.section == 0) cell.label.text = [words1 objectAtIndex:indexPath.row];
else if (indexPath.section == 1) cell.label.text = [words2 objectAtIndex:indexPath.row];
else if (indexPath.section == 2) cell.label.text = [words3 objectAtIndex:indexPath.row];
return cell;
Прописываю тип ячейки в viewDidLoad
:
[_collectionView registerClass:[MyCustomCell class] forCellWithReuseIdentifier:@"Cell"];
У меня есть настройка представления коллекции в моей раскадровке с делегатами и источником данных, связанными как обычно.
Теперь моя проблема... У меня есть два подхода, оба с проблемами. У меня есть 3 раздела, каждый рисунок из уникального массива данных.
После того, как я получил необходимые данные, я использую
[_collectionView reloadData]
. Это загружает правильное количество ячеек в соответствии с количеством массивов, но ячейки вне экрана не заполняются. Поэтому, когда я прокручиваю их на экране, у них нет установленной метки.Вместо вышеперечисленного я пытаюсь перезагружать каждый раздел по мере извлечения данных (предпочтительный маршрут), используя следующий код (один раз для каждого раздела):
[self.collectionView performBatchUpdates:^{ [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]]; } completion:nil];
Однако проблема с использованием этого метода заключается в том, что после его перезагрузки он заполняет представление моей коллекции правильным количеством ячеек, но сами ячейки пусты, а текст не установлен на метках.
В обоих сценариях, если я прокручиваю незагружаемые ячейки на экране, за его пределами и снова, они загружаются. Но в первый раз, когда вы видите их, они не делают.