2015-11-29 4 views
0

Я пытаюсь использовать UIcollectionView в моей игре SpriteKit, чтобы отобразить сцену выбора уровня. Представление коллекции имеет 6 разделов (начало, мир 1-5) с 8 ячейками в каждом (уровень 1-8). На данный момент это пользовательские ячейки с простой UILabel. Я могу использовать элемент select для указательного пути для загрузки моих уровней, все в порядке. Однако моя проблема заключается в следующем:Swift UI collection view layout

Первый раздел в представлении коллекции - это начальный экран, поэтому я не хочу, чтобы представление коллекции отображало 8 ячеек в этом разделе. Предполагается, что в этом разделе отображается только фоновое изображение и кратковременное нажатие. Так что я пытался в cellForIndexPath является

1) скрыть ячейки в этом разделе, но это приводит к проблемам текста меток с клетками в других разделах

2) скрыть текстовые метки и сделать цвет ячейки прозрачным, так же проблема как 1

Итак, в основном, что я мог сделать, чтобы решить эту проблему?

Я могу разместить начальную часть в другой SKScene, но я предпочитаю, если все это в виде коллекции. Другой вариант, о котором я думал, состоит в том, чтобы каждый раздел имел только 1 ячейку, размер экрана и добавлял 8 UIButtons для каждого раздела, кроме начального раздела. Мне также нужно, чтобы некоторые из этих ячеек/кнопок были отключены до тех пор, пока предыдущий уровень не будет разблокирован. Я не уверен, что лучший подход, 8 ячеек в качестве кнопок или 8 UIButtons в 1 ячейке.

Я только ищу решение UICollectionView, у меня уже есть альтернатива, потому что это сделает мою жизнь намного проще при преобразовании в tvOS и с помощью фокусировочного материала и навигации по 6 секций с более чем 30 кнопок

Спасибо вы очень много для любой помощи

ответ

0

Вы можете зарегистрировать более, что один вид клетки в UICollectionView:

  • Если вы используете конструктор интерфейса добавить другую коллекцию Просмотр ячейку из библиотеки объектов и установить его идентификатор повторного
  • В противном случае регистра перо или класс viewDidLoad метод вашего UICollectionViewController использованием self.collectionView?.registerNib(forCellWithReuseIdentifier:) или self.collectionView?.registerClass(forCellWithReuseIdentifier:)

Затем, когда вы Dequeue ячейки использовать правильный идентификатор повторного использования:

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    var reuseIdentifier = "identifier of cell with 8 button" 
    if indexPath.section == 0 { 
     reuseIdentifier = "identifier of start cell as you set in IB of viewDidLoad" 
    } 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) 

    // Configure the cell depending on indexPath 

    return cell 
} 
+0

Большое вам спасибо, это именно то, что я искал. Новое для UiKit, так что все это совершенно ново для меня. Я на самом деле пытался это сделать в какой-то момент, но моей проблемой была строка let cell = .... Я писал это так: «let cell = collectionView.dequeueReusableCellWithReuseIdentifier (reuseIdentifier, forIndexPath: indexPath) как!MyCustomCell ". MyCustomCell вызвал у меня проблемы при попытке использовать 2 ячейки. Не понял, что вам не нужна эта линия. Еще раз спасибо – crashoverride777

+0

Если я действительно могу задать вам еще один вопрос. Использование вашего пути отлично работает. вернитесь к использованию 8 ячеек вместо 1 с помощью 8-клавишной ячейки, есть аналогичный трюк, как изменить размер ячейки в разделе 1 (0). Я использую flowLayout, поэтому я определяю размер элемента в представлении коллекции, а не в пользовательской ячейке – crashoverride777

+0

'as! MyCustomCell' означает, что вы хотите * принудительно * придать ячейку классу MyCustomCell', когда у вас есть 2 разных ячейки, один из которых (возможно) имеет другой класс, поэтому он не сможет выполнить команду. вашей ячейки в Interface Builder –

0

Я бы выбрал 8 ячеек в качестве кнопок, а не использовал 1 ячейку с серией UIButtons, что упростит ситуацию и позволит вам использовать didSelectItemAtIndexPath. Не можете ли вы просто использовать numberOfItemsInSection для определения только 1 ячейки в первом разделе?

Моим подходом, вероятно, будет использование настраиваемого макета потока и дополнительного представления для вашего фонового изображения, а кнопка «Пуск» - немного сложная, но очень гибкая.

+1

эй, спасибо за вашу помощь. Теперь я, скорее всего, просто использую 8 ячеек в сочетании с тем, что предложил Пиотрек, который имеет 2 пользовательских ячейки. Я не полностью понял создание ячейки с помощью 2 пользовательских ячеек. Еще раз спасибо за вашу помощь – crashoverride777

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