单击 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 内