Как реализовать отображение / скрытие разделов в viewview с помощью swift - PullRequest
0 голосов
/ 08 января 2019

Я искал по всему интернету это, и я не уверен, что это можно сделать, потому что я новичок в разработке для iOS. Я хочу, когда мое приложение начинает показывать мне только первый раздел заголовка и мои ячейки , Затем, когда я нажимаю на одну из моих ячеек, я хочу показать мне снизу раздел 2 с заголовком, а также ячеками и т. Д. Я правильно установил ячейки и сечения, также я могу выбрать каждую ячейку и правильно изменить цвет фона и т. Д. Мое приложение работает, но оно показывает все разделы и ячейки одновременно.

Например:

Приложение запускается, и я должен видеть только раздел 1:

Заголовок раздела 1

cell1 cell2 cell3

Затем я нажимаю на ячейку 1 и должен видеть только раздел 1 и 2:

Заголовок раздела 1

cell1 cell2 cell3

Заголовок раздела 2

cell1 cell2 cell3 cell4

Затем я нажимаю на cell4, и я должен видеть только разделы 1, 2 и 3:

Заголовок раздела 1

cell1 cell2 cell3

Заголовок раздела 2

cell1 cell2 cell3 cell4

Заголовок раздела 3

cell1 cell2

и т.д.

Я обнаружил, что должен использовать эти методы, упомянутые ниже, но я не знаю, как реализовать разделы show / hide в моей коллекции.

Вот мой код:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let cell = collectionView.cellForItem(at: indexPath)

    if indexPath.section == 0 {
        if (indexPath.row == 0) {cell!.contentView.layer.backgroundColor =  colorLiteral(red: 0, green: 0.4784313725, blue: 1, alpha: 1)}
        if (indexPath.row == 1) {cell!.contentView.layer.backgroundColor =  colorLiteral(red: 0, green: 0.4784313725, blue: 1, alpha: 1)}
    }
}

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {

    let cell = collectionView.cellForItem(at: indexPath)

    if indexPath.section == 0 {
        if (indexPath.row == 0) { cell!.contentView.layer.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)}
        if (indexPath.row == 1) { cell!.contentView.layer.backgroundColor =  colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)}
    }
}

func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
}

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 
}

1 Ответ

0 голосов
/ 08 января 2019

Было бы полезно, если вы моделируете свои данные, чтобы вы могли отслеживать, какой раздел должен быть скрыт (и цвет фона ячейки). Может быть, вы уже, но я просто приведу пример:

class MyModelSection {
    var items = [MyModel]()
    var hidden = true
}

class MyModel {
    var backgroundColor: UIColor?
}

class MyViewController: UICollectionViewController: {
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    var dataSource = [MyModelSection]()
    var visibleDataSource: [MyModelSection] {
        return dataSource.filter { !$0.hidden }
    }

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 }

Затем вы можете использовать протокол UICollectionViewDataSource для определения секций, которые должны отображаться

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return visibleDataSource.count
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return visibleDataSource[section].items.count
}

Из перечисленных вами функций я думаю, что вы будете использовать:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    // Not sure how your logic for picking which one gets displayed...
    guard visibleDataSource.count >= indexPath.section else {
        return
    }

    let dataForNextSection = visibleDataSource[indexPath.section + 1]
    dataForNextSection.hidden = false
    collectionView.reloadData()
}
...