переход при нажатии на ячейку представления коллекции, встроенную в ячейку представления таблицы - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть следующая логика приложения

Контроллер TableView => Ячейка табличного представления => CollectionView встраивается в каждую ячейку табличного представления

Я хочу, когда я нажимаю на ячейку табличного представления, чтобы перейти кконтроллер представления таблицы к другому контроллеру.

Кто-нибудь знает, как это сделать?

Вот мой код:

В tableViewControler

    let cell = tableView.dequeueReusableCell(withIdentifier: "book", for: indexPath) as! BookTableViewCell
            let books = (indexPath.row == 2) ? trendingbooks : newbooks
            if (cell.collectionView === nil) {
                cell.addCollectionView();
            }

    performSegue(withIdentifier: "bookDetail", sender: indexPath)
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
        let dc = segue.destination as! DetailViewController
        dc.data = self.tableRowData;
    }


В BookTableViewCell

    func addCollectionView () {
        let flowLayout = UICollectionViewFlowLayout()
        flowLayout.scrollDirection = .horizontal

        let cellWidth = UIScreen.main.bounds.width / 3
        let cellHeight = UIScreen.main.bounds.height / 3
        flowLayout.itemSize = CGSize(width: 100, height: self.frame.height)

        //You can also provide estimated Height and Width
        flowLayout.estimatedItemSize = CGSize(width: 100, height: self.frame.height)

        //For Setting the Spacing between cells
        flowLayout.minimumInteritemSpacing = 20
        flowLayout.minimumLineSpacing = 20

        let cellReuseIdentifier = "collectionCell"
        self.collectionView = UICollectionView(frame: CGRect(x: 0,
                                                             y: 0,
                                                             width: self.frame.width,
                                                             height: self.frame.height),
                                               collectionViewLayout: flowLayout)
        self.collectionView.showsHorizontalScrollIndicator = false
        self.collectionView.translatesAutoresizingMaskIntoConstraints = false
        self.collectionView.backgroundColor = .clear
        self.collectionView.delegate = self
        self.collectionView.dataSource = self
        self.collectionView.register(BookCollectionViewCell.self, forCellWithReuseIdentifier: cellReuseIdentifier)

        self.addSubview(collectionView)
    }

Ответы [ 3 ]

0 голосов
/ 19 сентября 2019

Я думаю, вы можете использовать segue следующим образом:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == segueIdentifier,
       let destination = segue.destination as? DetailViewController,
       let selectedIndexPath = tableView.indexPathForSelectedRow,
       let selectedCell = tableView.cellForRow(at: indexPath) as? YourCell 
    {
        let collectionView = selectedCell.collectionView
        // Then do your stuff here
    }
}
0 голосов
/ 19 сентября 2019

Делегат встроенного представления коллекции (BookTableViewCell) будет первым, кто услышит о выборе.Вопрос в том, как эта ячейка табличного представления должна передать выбор в VC, который ее содержит.Одним из ответов является определение делегата на BookTableViewCell, который передает информацию о выборе из встроенного представления коллекции в содержащий VC.

Поэтому при настройке BookTableViewCell установите его делегата в VC, который его содержит, ипусть VC реализует этот метод для выполнения перехода.

protocol BookTableViewCell Delegate {
    func didSelectInEmbeddedCollection(cell: BookTableViewCell, at: IndexPath)
}

Имеет реализацию ячейки метода didSelectItem встроенного представления коллекции, вызовите этот didSelectInEmbeddedCollection.

0 голосов
/ 19 сентября 2019

Я считаю, что функция, которую вы ищете: tableView(_:didSelectRowAt:)

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.performSegueWithIdentifier("bookDetail", sender: indexPath)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...