5

В моем приложении у меня есть домашняя страница с карточкой/сеткой с несколькими разделами. Таким образом, UICollectionView - это очевидный выбор. Но эти карты сильно различаются по дизайну, загрузке данных и их функциональности. Таким образом, все те, кто находится в одном контроллере, были бы громоздкими, сложными и сложными в обслуживании. Поэтому мы подумали, что нам нужно разделить их на свои UIViewControllers. Каждая из них обрабатывает тип карты и вычисляет ее содержимое, которое будет отображаться внутри карты. Наш главный контроллер главной страницы несет ответственность только за то, что эти viewcontroller просмотрели внутри ячеек UICollectionView.Встраивание UIViewcontrollers внутри UICollectionviewCells

К summerize,

  • HomeViewController который имеет CollectionView
  • Каждый вид внутри collectionViewCell и его данных поддерживаются своего класса контроллера.
  • Все экземпляры контроллера находятся внутри HomeViewController и added as its children .- Apple Guide
  • The appearance call с до всех детей viewControllers сделаны сами так, тем contentSize (который используется в качестве элемента для размера макета CollectionView) расчета из представлений контроллера требуется, чтобы представление было загружено и данные должны быть установлены.

Вопрос в том, является ли этот выбор дизайна правильным? Или какой подход вы бы выбрали для реализации такого экрана? Поскольку мы создаем много viewControllers (по одному для каждой ячейки), это влияет на память или производительность? И если я хочу кэшировать только некоторые viewControllers или загружать их по мере прокрутки пользователя или когда его время добавить его в ячейку collectionView, как мне это сделать, поскольку вычисление размера этой ячейки зависит от данных и представлений при укладке из макета CollectionView.

ответ

1

Я думаю, что ваш подход действителен и с теоретической точки зрения имеет смысл отделить представление от его данных. Но в этом случае я предпочел бы, чтобы подкласс UICollectionViewCell реализовал свои собственные данные, в основном действуя как viewController. Это немного упростит ваш код, так как вам не нужны добавленные viewControllers и код, который поставляется с ними; вместо этого вы можете просто добавить свой TableView в contentView ячейки. Это кажется мне более естественным, так как тогда у вас может быть коллекцияViewView HomeViewController автоматически обрабатывает вызовы своих делегатов, когда ячейки перемещаются за пределы экрана и во время процесса загрузки. Вам не нужно будет отправлять сообщения в ячейки о том, кто они или когда они должны загружаться, все это будет заботиться о вас автоматически. Кроме того, я действительно не думаю, что методы жизненного цикла представления в каждой ячейке являются ценными и менее интуитивными, чем наличие загрузки и обновления ячеек в составе коллекции. В любом случае, удачи!

+0

Я полностью понимаю, когда вы говорите, что это кажется излишним. Может быть, я был не слишком ясен, когда сказал дизайн t, загрузка данных сильно варьируется от карты к карте. На карточке может быть даже tableView внутри, или другой collectionView или какой-либо сложный набор представлений. Подобно делегатам tableView или другим представлениям в этих представлениях. Поэтому мне понадобится «Объект, который обрабатывает представление и его данные», который звучал как определение UIViewController для меня. Поэтому я решил использовать viewcontroller. – akshaynhegde

+0

И о том, как использовать диспетчер view для секции, в другом разделе могут появиться похожие типы карт, поэтому тип карт в каждом разделе не определен до тех пор, пока я не получу данные с сервера. Эти сведения (тип карты, данные и способы ее просмотра) определяются на стороне сервера. Поэтому я создам контроллер, который должен знать, как обращаться с каждым типом карты. – akshaynhegde

+0

Теперь я столкнулся с той же проблемой, что и я сделал, сделав снимок экрана представления View Controller, сохраните его в кеше и используйте этот скриншот в UICollectioVIewCell, все в порядке, кроме изменчивого прокрутки в первый раз, поскольку он создает представление и принимает снимок экрана, когда ячейка загружается в первый раз. Нужны некоторые предложения или улучшения – Koushik

Смежные вопросы