Я пытаюсь создать пользовательский UICollectionViewCell
, который содержит несколько свойств и зависит от значений этих свойств, составляющих компоненты внутри ячейки. Я использую dequeueReusableCellWithReuseIdentifier
для создания ячейки, затем устанавливаю некоторые свойства и в конце вызываю функцию layoutIfNeeded
, которая переопределяется внутри моей настраиваемой ячейки. Переопределенная функция устанавливает некоторые свойства ячейки, также, например, свойство BOOL установлено в YES, и после обновления ячейки (вызов reloadData
в режиме просмотра) функция layoutIfNeeded
вызывается снова. Когда я пытаюсь прочитать мое свойство BOOL, которое установлено в YES, я всегда получаю значение по умолчанию, которое НЕТ в первый раз, я звоню reloadData
. Когда я вызываю reloadData
второй раз, свойство имеет значение YES. Любая идея, что я делаю неправильно? Вот код, я использую:UICollectionViewCell неправильно задает свойства
кнопку мыши Я зову:
[myCollectionView reloadData];
метод cellForItemAtIndexPath
выглядит следующим образом:
MyCustomCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"myCustomCell" forIndexPath: indexPath];
cell.device = [collectionArray objectAtIndex:indexPath.row];
[cell layoutIfNeeded];
return cell;
И код layoutIfNeeded
внутри MyCustomCollectionCell.m
-(void)layoutIfNeeded{
NSLog(@"bool prop: %d",changedStatus);
changedStatus = YES;
}
Свойство BOOL определено в MyCustomCollectionCell.h
:
@property (nonatomic, assign)BOOL changedStatus;
UPDATE:
Я сожалею, что я сделал ошибку в моем посте. Я не освежаю коллекцию с reloadData
, но с reloadItemsAtIndexPaths
; Этот вызов заставляет снова вызвать метод init моей настраиваемой ячейки (не только при первом загрузке коллекции), а затем layoutIfNeeded
. Проблема в том, что ячейка не используется повторно, а создается снова, заставляя все свойства исчезать. Любая идея, как это исправить?
Вы можете определить, когда (в связи с вызовом '-reloadData') вы читаете' changedStatus'? –
'reloadData' вызывается внутри класса' viewController', а 'changedStatus' установлен и напечатан внутри' MyCustomCollectionCell'. Сначала называется 'reloadData', затем метод' cellForItemAtIndexPath', внутри этого метода 'layoutIfNeeded', а внутри' layoutIfNeeded' печатается 'changedStatus', а затем устанавливается новое значение. – AleksandarNS
bro я только что создал пустой проект и скопировал ваш код и вставил в свой проект. просто добавила одну строку после @implementation. синтезировать changedStatus. и работал нормально. не знаю почему, но работал. –