繁体   English   中英

如何在不使用情节提要或IB的情况下从嵌入式集合视图的单元导航到另一个视图控制器?

[英]How to navigate from an embedded collection view’s cell to another view controller without using Storyboard or IB?

关于应用程序(UICollectionView中的UICollectionView):

  • TabBarController是应用程序窗口的根视图控制器
  • TabBarController包含3个导航控制器。
  • 第一个导航控制器具有HomeViewController作为根视图控制器
  • HomeViewController包含CategoryCollectionView
  • CategoryCollectionView每个单元中都存在一个ItemCollectionView
  • 每个ItemCollectionView包含许多ItemCell

目标 :当用户单击ItemCell ,应用程序应导航到另一个视图控制器ItemViewController。 我正在完全使用代码开发此应用程序。 所以我想在没有Storyboard segue或IB的情况下执行此操作。 到目前为止,我还无法弄清楚。 如果您能指出正确的方向,那就太好了。 谢谢。

我尝试了以下方法,但是它们没有起作用:

第一种方法 :从CategoryCollectionView的单元格中访问窗口的根视图控制器

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let currentNavCon = self.window?.rootViewController!.navigationController
    currentNavCon?.pushViewController(ItemViewController(), animated: true)
}

第二种方法 :我在HomeViewController定义了一个函数itemCellClicked ,并从CategoryCollectionView的单元格的didSelectItemAt中调用了它。

func itemCellClicked(_ sender: CatalogViewCategoryCell, _ position: Int) {
    let itemViewController = ItemViewController()
    navigationController?.pushViewController(itemViewController, animated: true)
}

并且,在单元格内:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    HomeViewController().itemCellClicked(self, indexPath.item)
}

从单元格推送视图控制器从来都不是一个好主意。 您需要将Click事件从ItemCell传播到HomeViewControlller
在您的CategoryCollectionView定义一个闭包类型的公共属性。

var onDidSelectItem: ((IndexPath) -> ())?

现在在CategoryCollectionViewdidSelectItem ,像这样调用闭包。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        self.onDidSelectItem?(indexPath)
}

在您的HomeViewControlllercellForRow ,接收回调。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    categoryCollectionView.onDidSelectItem = {(indexPath) in
       //item at indexPath clicked, do whatever you want to do with it.
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM