Как открыть активность и передать переменную при выборе ячейки коллекции? - PullRequest
0 голосов
/ 07 июля 2019

У меня есть collectionView, и я использую пользовательскую ячейку, которая показывает изображение и метку. Я заполняю представление массивом. Когда ячейка выбрана, я хочу открыть новое действие и передать имя класса. Вот мой код:

class CollectionViewController: UICollectionViewController {
let classes = ["English","Math","Science","Social Studies","Other","Technology"]
let class_images : [UIImage] = [
    UIImage(named: "English")!,
    UIImage(named: "Math")!,
    UIImage(named: "Science")!,
    UIImage(named: "Social Studies")!,
    UIImage(named: "Other")!,
    UIImage(named: "Technology")!
]
override func viewDidLoad() {
    super.viewDidLoad()
  var layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
    layout.sectionInset = UIEdgeInsets(top: 22, left: 22, bottom: 22, right: 22)
    layout.minimumInteritemSpacing = 22
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of items
    return classes.count
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "class_cell", for: indexPath) as! custom_class_cell
    cell.class_name.text = classes[indexPath.item]
    cell.class_image.image = class_images[indexPath.item]
    // Configure the cell
cell.layer.borderWidth = 1.0
    cell.layer.borderColor = UIColor.black.cgColor
    return cell
}
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
 //This isn't the right code, but an example of what I want to do!
 if (indexPath=1){
 let vc = self.storyboard?.instantiateViewController(withIdentifier: 
 "classes")
                self.present(vc!, animated: true, completion: nil)
 //I want to pass this string to the class
 let class_name2 = "English"
 }
 else if(indexPath=2){
 let vc = self.storyboard?.instantiateViewController(withIdentifier: 
 "classes")
                self.present(vc!, animated: true, completion: nil)
 //I want to pass this string to the class
 let class_name2 = "Math"
 //it keeps going through the technology cell
  }

}

В методе didSelectItemAt есть пример того, что я пытаюсь сделать, но код неверен. Я хочу сделать это для всех ячеек с английского на технологию. Заранее благодарю и дайте мне знать, если у вас есть какие-либо вопросы!

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Это на самом деле очень простое решение, я просто усложнил его!

 override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
   let valueToPass = classes[indexPath.row]

Это дает вам имя каждого класса при нажатии на ячейку.После этого просто выполните метод подготовки к segue.

0 голосов
/ 07 июля 2019

самый простой способ: в контроллере dest (скажем, это экземпляр DetailController) у вас должно быть:

class DetailController...
...    var myInfo : MyInfo?

(MyInfo должен содержать ВСЕ данные, которые вы хотите передать.)

и в подготовке к переходу:

    vc.myInfo = Info(class_name2)

в viewDidLoad заполнить ваш пользовательский интерфейс:

override func viewDidLoad() {
        super.viewDidLoad()
        self.detail.text = self. myInfo....
...