Выделение раздела / строки в UICollectionView - PullRequest
0 голосов
/ 11 февраля 2020

Я создаю игру Mastermind в Swift, полностью программно, поэтому никаких раскадровок. Я сделал макет и функциональность, и теперь я пытаюсь выполнить sh, чтобы выделить текущую строку, над которой работает пользователь, и как только пользователь завершит работу с этой строкой, анимируйте ее до следующей. .

XD Layout

Прикрепленное изображение показывает макет XD с выделенными компонентами вида uicollectionview. Для тех, кто не может видеть изображение, макет, встроенный в UICollectionViewCompositionalLayout, представляет собой сетку с 10 секциями, расположенными вертикально. В каждом разделе есть 6 ячеек, 4 ячейки-заполнителя, которые заполняются цветом, одна пустая ячейка для заполнения, и одна «заменяемая» ячейка, которая начинается пустой, получает кнопку GUESS после того, как пользователь заполнил ячейки-заполнители, и, наконец, представление, отображающее, сколько прав получил пользователь. Вот код, за исключением отступов и layoutSize, для экономии места:

        let guessItem = NSCollectionLayoutItem()

        let guessGroup = NSCollectionLayoutGroup.horizontal(),
            subitem: guessItem,
            count: 4)

        let emptyItem = NSCollectionLayoutItem()

        let emptyGroup = NSCollectionLayoutGroup.vertical(),
            subitem: emptyItem,
            count: 1)

        let dotItem = NSCollectionLayoutItem()

        let dotGroup = NSCollectionLayoutGroup.vertical(
            subitem: dotItem,
            count: 1)

        let guessRowGroup = NSCollectionLayoutGroup.horizontal(),
            subitems: [ guessGroup, emptyGroup, dotGroup ])

        let nestedGroup = NSCollectionLayoutGroup.vertical(
            layoutSize: NSCollectionLayoutSize(),
            subitems: [ guessRowGroup ])

        let section = NSCollectionLayoutSection(group: nestedGroup)

        let layout = UICollectionViewCompositionalLayout(section: section)
        return layout

Скажите, пожалуйста, хотите ли вы полный функциональный код, и я дам вам ссылку на Github.

То, что я пробовал, - это декорации, которые давали мне массу странных ошибок, и я не знал, как в любом случае анимировать или нацеливать конкретный выбор c, а также дополнительный вид.

In класс макета:

let overlayItemSize = NSCollectionLayoutSize(widthDimension: .absolute(45),
                                                  heightDimension: .absolute(45))
        let overlayItemPlace = NSCollectionLayoutAnchor(edges: [.top, .trailing])
        let overlayItem = NSCollectionLayoutSupplementaryItem(layoutSize: overlayItemSize,
                                                           elementKind: "OverlayItem",
                                                          containerAnchor: overlayItemPlace)

        nestedGroup.supplementaryItems = [overlayItem]

Размер и положение - временная попытка получить рабочий код.

Код UiCollectionViewLayout:

// in override init
self.register(OverlayCollectionReusableView.self, forSupplementaryViewOfKind: "OverlayItem", withReuseIdentifier: overlayID)

// down below
func collectionView(_ collectionView: UICollectionView,
    viewForSupplementaryElementOfKind kind: String,
    at indexPath: IndexPath) -> UICollectionReusableView {
        let overlayCell = collectionView.dequeueReusableSupplementaryView(ofKind: "OverlayItem", withReuseIdentifier: overlayID, for: indexPath)
        return overlayCell

    }

Проблема с этим что вместо того, чтобы показываться в верхнем правом углу, мой UICollectionViewReusableView заменяет элемент в позиции 5 в моем indexpath в каждом разделе, последней ячейке. Увеличение количества элементов до 7 также разрушает компоновку, и мне нужен только один, который переключает строки, а не по одному на раздел. десятая часть моего UICollectionView, у которого нет заданного размера, поскольку он просто ограничен верхним и нижним колонтитулами, и привязка к активной строке (переменная int).

У вас есть какие-либо предложения для меня?

Спасибо за потраченное время!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...