Подтвердить что ты не робот

Проектирование ячеек UICollectionView в nib с помощью Interface Builder (без раскадровки)

Я пытаюсь создать собственный прототип UICollectionViewCell (в Xcode 5.0.2), однако Interface Builder не позволяет мне добавить ячейку в мой UICollectionView при проектировании наконечника. Я могу установить количество элементов (ячеек), а Interface Builder создает и отлично отображает ячейки, если я использую раскадровку, но я не могу добавить ячейку в свой коллекционный вид в наконечнике. Я пробовал:

  • Перетаскивание ячейки коллекции в виде коллекции вручную из библиотеки объектов. (сбой: не позволяет мне отбрасывать ячейку в любом месте).
  • Создание моего коллекционного представления с помощью ячеек в раскадровке и копирование всего изображения в nib. (сбои: просмотр коллекции копируется, но ячейка ушла)
  • Создание моего представления коллекции с помощью ячеек в раскадровке, открытие раскадровки в качестве исходного кода, поиск ячеек коллекции, копирование соответствующего XML, открытие моего файла в качестве исходного кода, вставка его внутри моего представления коллекции в XML. (не удается: не удается открыть nib в Interface Builder, он дает ошибки. Когда я удаляю ячейку из исходного кода, она открывается снова. Не пытайтесь это, если вы не знаете, что делаете.)

Я также видел несколько вопросов по одной и той же проблеме:

Все они указывают на их программное и/или использование другого элемента для ячейки. Я знаю, как это сделать, но есть ли способ создать ячейку просмотра коллекции внутри представления коллекции внутри одного и того же представления в наконечнике, как и в раскадровке? Почему интерфейс Builder не позволяет мне делать это в nib, где он позволяет (и даже поощряет) отлично использовать раскадровку?

4b9b3361

Ответ 1

Простой ответ: нет, это невозможно. Подумайте о раскадровке как коллекции XIB. XIB просто определяет грани определенного представления, чтобы его можно было построить во время выполнения.

Что касается представлений коллекций и их реализаций раскадровки, важно понять, что раскадровка позволяет встраивать viewcontrollers и определять представления коллекций с их XIB, потому что это сохраняет основную парадигму раскадровки согласованной. Поскольку раскадровка является средством определения "истории" или сцены приложения, вполне естественно, что она позволяет объявлять многоразовые виды для использования внутри представления коллекции.

То же самое нельзя сказать о XIB, потому что фундаментальная идея XIBs используется в повторном использовании. Это позволит отображать представление коллекции, определенное в XIB, с любыми ячейками, используемыми с ним, если контроллер регистрирует эти классы с представлением коллекции. Таким образом, вы получаете преимущество повторного использования, поскольку другой контроллер может использовать один и тот же XIB и регистрировать разные ячейки и т.д.

Итак, я думаю, было бы гораздо сложнее разрешить объявление поддерживаемых ячеек представления коллекции внутри XIB, поскольку это нарушает принцип единой ответственности (если его можно назвать так), к которому стремятся XIB.

Лучшим решением будет определить подкласс пользовательского коллекционного представления, который регистрирует соответствующие ячейки при создании экземпляра, а затем использовать этот класс в вашем XIB.