首页 > 解决方案 > 从自定义 TableViewCell 中的 didSelectItemAt 自定义 CollectionViewCell 更改视图控制器

问题描述

我在 tableview 单元格中有一个集合视图,所以我想选择集合视图单元格并将它转到另一个视图控制器。那么我该怎么做呢?

我自己试过,要么什么都不做,“应用程序试图以模态方式呈现一个活动控制器”,要么“尝试呈现..在..其视图不在窗口层次结构中”。

标签: iosswiftuicollectionview

解决方案


在单元格类中添加一个(delegate单元格类之外)并在类中声明变量:

protocol CellSelectedDelegate { //Name them as you want
    func cellSelected()
}
class TableCell: UITableViewCell {
    var delegate: CellSelectedDelegate?
}

然后在单元格中didSelectItem

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
   delegate?.cellSelected()
}

现在转到您拥有的控制器tableView datasource类和delegate方法(假设它们在控制器类中而不是在另一个视图中)并将其添加到cellForItem方法中:

cell.delegate = self

最后一部分,custom delegate在控制器类中实现方法:

extension YourController: CellSelectedDelegate {
    func cellSelected() {
       //Present next controller here
    }
}

推荐阅读