1

У меня есть обычай UICollectionViewCell, и я из очереди его с моей точки зрения контроллера, зарегистрировав его как такUICollectionViewCell INIT с reuseIdentifier

[self.calendarView registerNib:[UINib nibWithNibName:NSStringFromClass([DayCell class]) bundle:nil] forCellWithReuseIdentifier:dayCell]; 

, а затем освобождении пакета из очереди, как так

cell = [collectionView dequeueReusableCellWithReuseIdentifier:dayCell forIndexPath:indexPath]; 

Мой вопрос, который UICollectionViewCell метод init позволит мне получить доступ к ячейке reuseIdentifier? Оба метода awakeFromNib и initWithCoder: вызываются, однако, оба журнала (null) для self.reuseIdentifier.

Это проблема, потому что я хочу использовать один и тот же класс UICollectionViewCell, но с разными reuseIdentifier s для получения слегка по-разному выглядящих ячеек, и я хочу выполнить стилизацию один раз после init. Например, ячейка с dayCellDisabledreuseIdentifier будет иметь ярлык более светлого цвета.

+0

Почему бы не настроить цвет в Interface Builder? – jlehr

+0

Потому что я хочу применить другой цвет на основе reuseIdentifier – artooras

+0

Я не уверен, что я следую. Каждый идентификатор повторного использования должен быть связан с отдельным экземпляром 'UICollectionViewCell', поэтому почему бы не применить цвет к каждой из ячеек в IB, так как вы их вообще создаете? – jlehr

ответ

1

Одно из решений я обнаружил, что работает, не отменяют любые инициализации или бодрствует методы, но настроить мой многоразовый вид в этом методе вместо

- (void)didMoveToSuperview {}; 

По-видимому, этот метод вызывается только один раз, когда добавляется вид к его обработчику. Я протестировал и подтвердил, что это относится к повторно используемому UICollectionViewCell, который добавляется к UICollectionView.

+0

Итак, вы определяете свойство и в зависимости от значения, которое вы инициализируете свою ячейку по-разному в 'didMoveToSuperview'? Я заметил, что 'didMoveToSuperview' не вызывается для каждой ячейки, которая отображается в представлении коллекции. Поэтому повторное использование ячеек происходит. Что это значит для приложения? – testing

+0

Я думаю, вы использовали идентификатор повторного использования. В зависимости от значения вы выбираете этот дизайн или другой. Умная! Есть ли проблема с производительностью, если вы делаете это в 'didMoveToSuperView' вместо инициализатора? – testing

+0

Ну, если ячейка повторно используется, то вы, вероятно, захотите сохранить ту же конфигурацию, что и при инициализации, так что это не проблема. И вы применяете фактические значения (строки, изображения) в контроллере представления, который является источником данных tableview. Что касается проблем с производительностью, я не тестировал - никаких очевидных замедлений. – artooras