Как я могу перейти к viewController из didSelectItemAt collectionView, который находится внутри ячейки tableView? - PullRequest
0 голосов
/ 04 марта 2020
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        //let cell: HomeCollectionViewCell = homeCollectionView.dequeueReusableCell(withReuseIdentifier: "homeCollectionViewCell", for: indexPath) as! HomeCollectionViewCell

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "ReadOrDownloadViewController") as! ReadOrDownloadViewController

        navigationController.pushViewController(vc, animated: true)

    }

Здесь Xcode говорит: «Использование неразрешенного идентификатора navigationController»

HomeCollectionViewCell находится под tableViewCell.

1 Ответ

1 голос
/ 04 марта 2020

Вы должны установить делегат или замыкание для класса ячейки, чтобы передать действие в viewcontroller

замыкание:

class myCell: UITableViewCell{
   var closure: (() -> Void)?

, так как вы устанавливаете этот класс как источник данных и делегат для collectionView затем переписать эту функцию как

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    closure?()
}

, затем в viewController, где вы устанавливаете источник данных tableview, тогда,

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.deque ....
cell.closure = {_ in
   let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "ReadOrDownloadViewController") as! ReadOrDownloadViewController
        navigationController.pushViewController(vc, animated: true)

для протокола то же самое, просто установите делегата в ячейке и вызовите функцию делегата в функции элемента didTap collectionView

...