У меня есть контроллер представления коллекции. Я хотел бы использовать его повторно. У меня есть два пользовательских макета коллекции, каждый из которых имеет свой собственный источник данных.
Какие шаги и в каком порядке я должен предпринять, чтобы изменить макеты и источник данных?
Мой контроллер CollectionView выглядит следующим образом:
- (id)initWithCollectionViewLayout:(UICollectionViewLayout *)layout {
self = [super initWithCollectionViewLayout:layout];
if (self) {
self.dataSource = [[WeekDataSource alloc] init];
}
return self;
}
- (void)loadView {
[super loadView];
[self setupCollectionView];
}
- (void)setupCollectionView {
self.collectionView = [[CalendarView alloc] initWithFrame:self.view.frame collectionViewLayout:self.collectionViewLayout];
self.collectionView.dataSource = self.dataSource;
self.collectionView.delegate = self.dataSource;
self.collectionView.backgroundColor = [UIColor whiteColor];
}
Контроллер отлично отображает представление коллекции, используя мой пользовательский макет, полученный из UICollectionViewLayout
.
У меня проблемы с изменением макета и источника данных, от которого он зависит.
Я пробовал следующее, но по какой-то причине collectionView настаивает на использовании старого collectionViewLayout.
self.dataSource = [[DayDataSource alloc] initWithScheduleNumber:0];
self.collectionView.dataSource = self.dataSource;
self.collectionView.collectionViewLayout = layout;
edit: я обнаружил, что self.collectionViewLayout
UICollectionViewController является атрибутом только для чтения. Означает ли это, что контроллер не предназначен для повторного использования таким образом? (повторно используется путем переключения его макета и источника данных во время выполнения)? Я полагаю, что он указывает на макет, который использовался для инициализации контроллера, поэтому проблема с представлением trhing для использования старого макета.