Контроллер дочернего представления в UICollectionViewCell
Предположим, я хочу получить пин-страницу Pinterest, например:
Это мой подход:
- делать
UICollectionViewController
Пин-страница являетсяUICollectionViewCell
- ячейка состоит из двух компонентов: контактная информация дочерний vc && водопад дочерний vc
Тогда возникает проблема: как я могу использовать дочерний контроллер представления?
Некоторый псевдокод:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
Pin *pin = self.dataSource[indexPath.row];
// i have to create a new childVC, based on different indexPath.
UITableViewController *pinInfoViewController = [[pinInfoViewController alloc] initWithPin:pin];
[cell updatePinViewWithPin:pin];
[self addChildViewController:pinInfoViewController];
// Add waterfall view controller
}
Каждый раз, когда вызывается этот метод, создается новый дочерний контроллер представления, это нормально или как его улучшить?
3 ответа
То, как я хотел бы подойти к этому, это подкласс UICollectionViewCell
и добавьте необходимые компоненты пользовательского интерфейса в качестве iVars. Когда вам нужно обновить пользовательский интерфейс новыми данными, вы должны захватить объект ячейки, как вы сейчас находитесь в псевдокоде, а затем вызвать метод, который вы объявляете, может быть updateCellWithModel:
и передайте ему модель, которая содержится в источнике данных. В этом методе вы выполняете несколько простых проверок того, созданы ли элементы пользовательского интерфейса или нет, и создаете их при необходимости, всегда полезно иметь проверки работоспособности в этих типах методов, но элементы должны быть созданы в методе init и будут всегда будь здесь.
РЕДАКТИРОВАТЬ: я думаю, что я ответил на ваш вопрос, но это все еще смущает меня, пожалуйста, добавьте больше информации, чтобы я мог редактировать свой ответ, если это необходимо.
Я недавно сталкивался с подобной ситуацией и изо всех сил пытался выбрать между различными решениями, такими как подробно описаны в UIViewController в UICollectionView. Похоже, что сейчас есть проект с открытым исходным кодом, который инкапсулирует этот шаблон: https://github.com/zats/Voltron. Если ваша проблема может быть лучше всего решена с помощью UICollectionView UIViewControllers, то это проще сделать, чем пытаться свернуть свою собственную.
Я не думаю, что они используют ячейку представления коллекции со встроенным представлением таблицы здесь. Это похоже на обычный контроллер представления, который посвящен булавке. Данные, извлеченные с сервера для указанного пина, вероятно, содержат информацию о названии пина, ссылке на пине, может быть изображении, всех людях, которые добавили пина, кем был первоначальный пиннер, лайками, избранными и т. Д. и контроллер представления анализирует эти данные соответственно. Контроллер использует эти данные для обновления пользовательского интерфейса и все.
Я вижу табличное представление и коллекционное представление, которое Pinterest мог бы использовать для реализации этого контроллера представления, но не похоже, что они встроили все эти данные в ячейку коллекционного представления.