![](/img/trans.png)
[英]How can I passed data from collection view cell to new view controller (programmatically and without storyboard)?
[英]How to navigate from an embedded collection view’s cell to another view controller without using Storyboard or IB?
关于应用程序(UICollectionView中的UICollectionView):
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) -> ())?
现在在CategoryCollectionView
的didSelectItem
,像这样调用闭包。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
self.onDidSelectItem?(indexPath)
}
在您的HomeViewControlller
的cellForRow
,接收回调。
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.