Поэтому я пытаюсь выдвинуть UITableViewController из UITableViewCell, который встроен в ячейку представления коллекции.

Таким образом, структура UICollectionView> UICollectionViewCell> UITableView> UITableViewCell.

Хочу ли я вызывать segue при нажатии TableViewCell?

Как я могу сделать это, так как вы не можете получить доступ к функции выполнения поиска для идентификатора?

0
Eli 29 Май 2017 в 07:22

2 ответа

Лучший ответ

Вы можете создать один protocol для этого и реализовать его с вашим ViewController, где у вас есть collectionView, после этого сделайте свойство экземпляра этого протокола в вашем collectionViewCell и установите это свойство в {{X3 }} метод. Теперь внутри didSelectRowAt метода tableView вызовите метод делегата с деталями, которые вы хотите передать для передачи.

protocol PassData {
    func performSegue(with data: String) //Set argument type to Type that you want pass instead of String         
}

Теперь реализуйте этот PassData протокол с вашим ViewController и внутри cellForItemAt установите делегата UICollectionViewCell.

class ViewController: UIViewController, PassData, UICollectionViewDelegate, UICollectionViewDataSource {
    //Other methods         

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomCollectionViewCell
        cell.passDelegate = self
        return cell
    }

    //Add the `performSegue(with:)` delegate method of PassData
    func performSegue(with data: String)  {
        //Perform segue here
        self.performSegue(withIdentifier: "SegueIdentifier", sender: data)
    }
}

Теперь в вашем CustomCollectionViewCell создайте одно свойство экземпляра с именем passDelegate типа PassData? после этого в didSelectRowAt методе tableView вызовите его метод делегата.

class CustomCollectionViewCell: UICollectionViewCell, UITableViewDelegate, UITableViewDataSource {

     var passDelegate: PassData?

     //Your other methods

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        //Pass whatever data that you want to pass
        self.passDelegate?.performSegue(with: array[indexPath.row]) 
    }         
}
3
Nirav D 29 Май 2017 в 05:04

Вы можете поместить tableViewController в стек навигации, вызвав self.navigationController?.pushViewController(tableviewVC, animate: true) из метода делегата табличного представления didSelectRowAtIndexPath

0
noob 29 Май 2017 в 04:54