Как использовать несколько массивов элементов в одном collectionView? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть один UICollectionView в моем UIView.То, что я пытаюсь сделать, это когда пользователь нажимает кнопку, тогда другие элементы (массив изображений) появляются на том же UICollectionView.

Допустим, у меня есть два массива элементов:

   let items = [UIImage(named: "moses-vega-436582-unsplash"), 
   UIImage(named: "april6"), UIImage(named: "april4"), UIImage(named: 
   "april5")]
   let items2 = [UIImage(named: "test01"), UIImage(named: "test02")]

Теперь, когда пользователь нажимает кнопку, я хочу обновить свой collectionView с изображениями из items2.Я использую базовый код для коллекций (мне легко определить, какие метки, например, показывать. Поскольку у меня есть переменная с именем «Testas», и если она равна 0, то я знаю, что это - collectionView по умолчанию, а в противном случае это ....:

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

   func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell

        if Testas == 0 {
        cell.image.image = items[indexPath.item]
        if indexPath.item == 0 {
            cell.label.text = "One"
        }
        if indexPath.item == 1 {
            cell.label.text = "Two"
        }
        if indexPath.item == 2 {
            cell.label.text = "Collection 3"
        }
        if indexPath.item == 3 {
            cell.label.text = "Rainy Days"
        }
        } else {
            cell.image.image = items2[indexPath.item]
            if indexPath.item == 0 {
                cell.label.text = "White"
            }
            if indexPath.item == 1 {
                cell.label.text = "Blue"
            }
        }
        return cell
    }

В заключение я спрашиваю, что мне нужно написать, чтобы передать items2 в collectionView, когда пользователь нажимает кнопку, и как заставить этот collectionView появляться? (Потому что это не функция или что-то, что я могзвоните легко, я думаю). Имейте в виду, что у меня есть функция, которая подсчитывает предметы. Так что это самая большая проблема. Мне нужна функция для подсчета моих товаров2, когда пользователь нажимает кнопку, а затем заставляет изображения появляться. Большое вам спасибо. Возможноневозможно даже сделать то, что я хочу, таким образом. Я не знаю.

1 Ответ

1 голос
/ 09 мая 2019

Вы можете легко сделать это, создав перечисление, а затем просто переключая его значение при нажатии кнопки, а затем collectionView.reloadData ()

Вот ваше перечисление:

enum ItemType : Int {
    case items = 0,
         items2 = 1
}

Объявите это так:

var itemType : ItemType = .items

Ваши функции collectionView будут выглядеть примерно так:

func collectionView(_ collectionView: UICollectionView, 
   numberOfItemsInSection section: Int) -> Int {
    return itemType == .items ? items.count : items2.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell

    switch itemType {
    case .items:
        // code for items array
    default:
        // code for items2 array
    }

    return cell
}

Нажатие вашей кнопки:

@IBAction func onButtonPressed(_ sender: Any) {
    itemType = .items2
    collectionView.reloadData()
}

Если у вас естьболее 2-х массивов, вам нужно обновить функции collectionView примерно так:

func collectionView(_ collectionView: UICollectionView, 
   numberOfItemsInSection section: Int) -> Int {
    switch itemType {
    case .items:
        return items.count
    case .items2:
        return items2.count
    case .items3:
        return items3.count
    default:
        return items4.count
    }
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell

    switch itemType {
    case .items:
        // code for items array
    case .items2:
        // code for items2 array
    case .items3:
        // code for items3 array
    default:
        // code for items4 array
    }

    return cell
}
...