Переход к контроллеру представления по щелчку ячейки в представлении коллекции - PullRequest
0 голосов
/ 02 июля 2018

Мне нужно выполнить переход к контроллеру представления по щелчку ячейки (содержит только метку) в представлении коллекции. Я пытался использовать:

collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)

а также:

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

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

Я использую Swift 4.1 и Xcode 9.4.1.

Код:

   class MyCasesViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{

    var MyCases : [[String]] = [[]]
    var textPassedOver : String?



    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        label.text = textPassedOver



        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Register cell classes
        //self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



    // MARK: UICollectionViewDataSource

     func numberOfSections(in collectionView: UICollectionView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return MyCases.count
    }


     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of items
        return MyCases[0].count
    }

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

        // Configure the cell

        cell.label.text = MyCases[indexPath.section][indexPath.item]

        if(indexPath.section == 0){
           cell.label.font = UIFont(name: "bold", size: 6)
        }else{
            cell.label.font = UIFont(name: "HelveticaNeue", size: 14)
        }
        //cell.isSelected = true

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        performSegue(withIdentifier: "CaseDetails", sender: self )
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        print(segue.identifier)
        if(segue.identifier == "CaseDetails"){
            let destinationVC = segue.destination as! CaseDetailViewController
          //CaseDetailViewController.delegate = self
            destinationVC.textPassedOver = "pass this text"
        }
    }

//    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//        collectionView.allowsSelection = true
//       print("is it here")
//        if(indexPath.section == 1 ){
//            print("Hurray")
//            let viewController = UIViewController()
//            self.navigationController?.pushViewController(viewController, animated: true)
//        }
//    }

//    func collectionView(_ collectionView: UICollectionView, didSelectItemAtIndexpath indexpath: IndexPath){
//        print("is it here now")
//        print(indexpath.section)
//        print(indexpath.item)
//    }
//
//    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
//        if(segue.identifier == "CaseDetails" ){
//            let cell = sender as! CustomViewCell
//            var destination = segue.destination as! CaseDetailViewController
//            destination.flag = "Hurray"
//        }
//    }






    // Uncomment this method to specify if the specified item should be selected
     func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
        return true
    }



}

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Хорошо, я понял, что в моем коде нет ничего плохого. По странной причине я обнаружил, что если я применяю ограничения к своему представлению коллекции, событие onclick не вызывает функцию didselectitemat. Когда я снял эти ограничения, это сработало.

0 голосов
/ 02 июля 2018

Вам необходимо установить делегата в viewDidLoad

self.collectionView.delegate = self
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...