#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
}
}
}