массивы представления коллекции, привязанные к индексу - PullRequest
0 голосов
/ 23 февраля 2019

Я делаю проект контроллера с тремя представлениями с первыми двумя представлениями, это collectionViews.Выбранная ячейка будет загружать второй контроллер представления с помощью segue и другого массива в зависимости от того, какой индекс был выбран в первом главном представлении.Может кто-нибудь указать мне в правильном направлении, как связать данные для загрузки во втором представлении сбора.

import UIKit

class ViewController: UIViewController {

@IBOutlet private weak var collectionView: UICollectionView!


var collectionData = ["cell1", "cell2", "cell3", "cell4", "cell5", "cell6", "cell7", "cell8"]



override func viewDidLoad() {
    super.viewDidLoad()

    let height = (view.frame.size.width / 2.76)
    let width = view.frame.size.width / 1
    let layout = collectionView.collectionViewLayout as!
        UICollectionViewFlowLayout
    layout.itemSize = CGSize(width: width, height: height)


        }

    }

    extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return collectionData.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath)
    if let label = cell.viewWithTag(100) as? UILabel {
        label.text = collectionData[indexPath.row]

        }
    return cell
    }

    didSelectItemAt indexPath: IndexPath) {

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "BannerSegue" {
       if let _ = segue.destination as? BannerSelection, let _ = sender as? IndexPath {

      }
    }
  }
}

, который является контроллером основного представления.тогда у этого есть переход к этому представлению

import UIKit

class BannerSelection: UIViewController {


    @IBOutlet weak var collection2: UICollectionView!

    var BannerData = ["bannerA1", "bannerA2", "bannerA3", "bannerA4", "bannerA5", "bannerA6", "bannerA7", "bannerA8", "bannerA9", "bannerA10", "bannerA11", "bannerA12"]

    var selection: String!


    override func viewDidLoad() {
    super.viewDidLoad()
    let height = (view.frame.size.width / 3.76)
    let width = view.frame.size.width / 1
    let layout = collection2.collectionViewLayout as!
    UICollectionViewFlowLayout
    layout.itemSize = CGSize(width: width, height: height)

    }

}

    extension BannerSelection: UICollectionViewDelegate, UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return BannerData.count
}

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let bannercell = collectionView.dequeueReusableCell(withReuseIdentifier: "BannerSelectionCell", for: indexPath)
    if let label = bannercell.viewWithTag(1) as? UILabel {
        label.text = BannerData[indexPath.row]
    }
    return bannercell
}
    func collectionView(_ BannerSelection: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    }
}

Так что я пытаюсь достичь, скажем ... index 2, чтобы иметь массив "bannerB1, bannerB2" и так далее, и так далее.затем я применю ту же технику ко второму контроллеру представления, чтобы заполнить окончательное представление конечным UIImage.Спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Поскольку ваша структура данных мне неясна, похоже, что ваши данные - это словарь массива, подобный этому

dict =    [
       "cell1" : [Banner1, Banner2,..]
       "cell2" : [Apple1, Apple2, ..]

       //so on 

    ]

Какова структура вашей структуры данных, пусть она будет сохранена в UserDefaults.

UserDefaults.standard.setValue(dict, forKey: "myDataStructure")

при извлечении во втором контроллере представления

let array = dict["cell1"] as? Array<String> // depends on the data structure 

и заполнении вашего viewController.

0 голосов
/ 23 февраля 2019

Вы можете сохранить данные первого представления в UserDefaults, а затем извлечь данные первого виртуального канала из второго представления и загрузить их

...