单击collectionView单元格时如何打开不同的视图控制器

Posted

技术标签:

【中文标题】单击collectionView单元格时如何打开不同的视图控制器【英文标题】:How to open different view controllers when a collectionView cell is click 【发布时间】:2017-05-12 19:40:27 【问题描述】:

我想知道在我的 collectionView 中单击特定单元格时如何打开不同的 viewController。对于此示例,假设我有一个如下所示的 collectionView。

假装没有标签,只是一个彩色视图。现在假设我的情节提要中有 3 个不同的 viewControllers 用于每个 collectionView 单元格。故事板看起来像这样。

这就是我发现自己陷入困境的地方。因此,当单击橙色单元格时,我想显示橙色的 viewController,反之亦然。我知道如何为所有单元格显示一个视图控制器,但不为特定单元格显示不同的视图控制器。那么我怎么能做到这一点。非常感谢任何帮助或链接。感谢您花时间阅读我的问题。 :)

【问题讨论】:

使用collectionViewCell,您是在显示图像还是只是用背景颜色标记和查看? 对于这个简单的例子,只有背景颜色,当点击颜色时,我希望它显示具有相同颜色的 viewController。但是,我能够通过使用 Shabir 的第二个答案来实现。使用单元格背景颜色。第一个答案不知道如何添加不同的标识符。那么如何添加不同的标识符呢? 为此您需要使用不同的重用标识符注册单元 【参考方案1】:

您可以通过访问单元格背景的颜色属性轻松做到这一点。

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
    let cell: UITableViewCell? = tableView.cellForRow(at: indexPath)
    if (cell?.backgroundColor == .red) 
        // go to red
    
    else if (cell?.backgroundColor == .orange) 
        // go to orange
    


【讨论】:

Shabir 感谢您抽出宝贵时间回答我的问题。对于每种颜色,我是否需要将另一个 collectionViewCell 拖到 collectionView 中?因为正如您在故事板屏幕截图中看到的那样,它只有一个单元格。那么我是否需要在 collectionView 中添加更多单元格。 感谢 Shabir,终于能够实现我想要的行为。【参考方案2】:

您需要使用不同的标识符来识别您单击的单元格。或者你可以使用单元格的颜色字符串

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    let cell: UITableViewCell? = tableView.cellForRow(at: indexPath)
    if (cell?.reuseIdentifier == "red") 
        // go to red
    
    else if (cell?.reuseIdentifier == "orage") 
        // go to orange
    


【讨论】:

KKRocks 感谢您抽出宝贵时间回复我的问题。对于每种颜色,我是否需要将另一个 collectionViewCell 拖到 collectionView 中?因为正如您在故事板屏幕截图中看到的那样,它只有一个单元格。那么我是否需要在 collectionView 中添加更多单元格。 没关系想通了。终于能够使用 Shabir 方法实现我想要的行为。我没有完全理解你的方法。除了情节提要中的原型单元格之外,我如何向其他单元格添加可重用标识符

以上是关于单击collectionView单元格时如何打开不同的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift ios 中单击该单元格时在 UICollectionViewcell 中显示图像?

选择collectionView单元格时如何获取项目ID

如何将值从 tableview 传递到 collectionview

如何在collectionView中调用tableView的didDeselectRowAt

选中时 CollectionView 单元格移动

当用户单击不同的单元格时,如何在一个 ViewController 下显示多个 webview/URL