Как передать данные из выбранной ячейки UICollectionView в TabBarController с двумя другими ViewControllers

#swift #uitableview #uicollectionview #uitabbarcontroller #uicollectionviewcell

#swift #uitableview #uicollectionview #uitabbarcontroller #uicollectionviewcell

Вопрос:

У меня есть VC (mainVC) с ScrollView, который имеет несколько CollectionViews (в виде разделов), каждый CollectionView имеет несколько ячеек. Для каждой ячейки у меня разные значения в массивах, которые я хотел бы показать в другом VC (TableViewController), подключенном к TabBarController.

mainVC подключен через segue (не через cell).

Я реализовал функцию prepare (для перехода:), насколько я могу с помощью if collection.tag == Int передавать массив во все задействованные ячейки (очевидно). Итак, данные передаются правильно, я просто не могу понять, как реализовать indexPath.item для правильного представления данных в TableView для выбранной ячейки.

Например: collection1 -> cell[0] -> tableview (array1), collection1 -> cell[1] -> tableview (array2), collection2 -> cell[0] -> tableview (array3) и так далее.

Я пробовал много разных способов, даже через didSelectItemAt с оператором switch с регистром для каждого представления коллекции и indexPath.Item и indexPath.Строка тоже, но данные не должны передаваться таким образом (?)

Код:

var skuskaValues1:NSArray = ["Skuska 1A", "Skuska 1B", "Skuska 1C"]

var skuskaValues2:NSArray = ["Skuska 2A", "Skuska 2B", "Skuska 2C"]

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    
    if segue.identifier == "Skuska" {


        if collectionView.tag == 0 {

        }
       if collectionView.tag == 1 {

        }


    }
}
  

В didSelectItemAt:

 let VC1 = self.tabBarController?.viewControllers?[0] as! SkuskaTableViewController

switch collectionView {
    case basicsCollectionView:
        switch indexPath.item {
        case 0:


            performSegue(withIdentifier: "Skuska", sender: collectionView)
            VC1.skuskaValues = skuskaValues1 as! [String]

        case 1:
            performSegue(withIdentifier: "Skuska", sender: collectionView)
            VC1.skuskaValues = skuskaValues2 as! [String]
        default:
            print("something")
        }
  

Спасибо за любые предложения

Ответ №1:

Вместо того, чтобы объявлять свой VC1 на своем didSelectItemAt , вы должны сделать это на своем prepare(for segue:)

например

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "Skuska" {
            if let destVC = segue.destination as! YourViewControler {
                destVC.yourVariable = valueYouWantToPass
            }
        }
    }