单击 CollectionViewCell 内的 ImageView 以转到 ViewController

Posted

技术标签:

【中文标题】单击 CollectionViewCell 内的 ImageView 以转到 ViewController【英文标题】:Click ImageView which is inside a CollectionViewCell to go to ViewController 【发布时间】:2017-05-24 18:42:52 【问题描述】:

我在 CollectionViewCell 中有一个 ImageView。我希望能够单击图像并将我带到另一个 ViewController。我该怎么做?这是我目前的代码。

import UIKit

class FirstViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource 
    @IBOutlet weak var collectionView: UICollectionView!

    var images = ["meal1", "photograph1", "meal1"]

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.collectionView.delegate = self
        self.collectionView.dataSource = self
    

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return images.count
    

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CollectionViewCell

        //set images
        cell.imageView.image = UIImage(named: images[indexPath.row])

        return cell
    

【问题讨论】:

【参考方案1】:

正如您所说,您想检测collectionview 单元格上的图像点击,请通过此代码:

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.connected(_:)))

    cell.yourImageView.isUserInteractionEnabled = true
    cell.yourImageView.tag = indexPath.row
    cell.yourImageView.addGestureRecognizer(tapGestureRecognizer)

并将以下方法添加到您的 ViewController

func connected(_ sender:AnyObject)
     print("you tap image number : \(sender.view.tag)")
     //Your code for navigate to another viewcontroller
    

注意 - 确保您的单元格图像的用户交互已启用

【讨论】:

【参考方案2】:

在collectionView "cellForItemAt" 方法中将tabGestureRecognizer 添加到您的imageview,并在识别器点击方法中调用segue 以转到所需的viewcontroller。

【讨论】:

【参考方案3】:

斯威夫特 5

CollectionView 功能:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.tap(_:)))

    cell.yourImg.isUserInteractionEnabled = true
    cell.yourImg.tag = indexPath.row
    cell.yourImg.addGestureRecognizer(tapGestureRecognizer)

    return cell

点击功能:

@IBAction func tap(_ sender:AnyObject)
    print("ViewController tap() Clicked Item: \(sender.view.tag)")

【讨论】:

【参考方案4】:

您可以给我们一个不带标题的UIButton and set the image property on it,也可以添加一个UIGestureRecognizer to the UIImageView。无论哪种方式,您只需在收到操作后展示或显示您想要显示的 ViewController。

在这种情况下我经常做的一件事是创建一个 CollectionCellDelegate 协议,该协议具有一个回调函数(类似于buttonPressed:forCollectionCell:),我可以让我的 CollectionView 符合该协议,然后将每个单元格的委托设置为集合视图。然后,您可以在按下按钮/图像时调用 CollectionView,并让 CollectionView 处理您想要的任何行为,在这种情况下,呈现/推送新的视图控制器。

【讨论】:

以上是关于单击 CollectionViewCell 内的 ImageView 以转到 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何为 collectionviewcell 内的进度条创建 IBOutlet?

按下 CollectionViewCell 内的按钮后如何呈现 ViewController

约束 UIView 内的标签,该标签位于可扩展 collectionViewCell 内

单击 CollectionViewCell 中的按钮

如果单击特定的 CollectionViewCell 做某事

uiCollectionViewCell 内的 Uitableview