1

我正在使用 UICollectionView,其中有一个带有 Tap Gesture Recognizer 的 UIImage 作为我的 CollectionView 的单元格模型。我还有 57 张不同名称的图像,我想根据我点击的图像打印到控制台。

这是我的代码:

    import UIKit

class ViewController: UIViewController {

    let OLLData = OLLCases()


    // MARK: - Outlets

    @IBOutlet weak var collectionView: UICollectionView!

    override func viewDidLoad() {
        super.viewDidLoad()

    // Do any additional setup after loading the view.
}



// MARK: - Navigation
@IBAction func isSelected(_ sender: Any) {
    print("selected \(caseName)")
}

}

//MARK: - Data source

extension ViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return OLLData.list.count
}

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

    let image = OLLData.list[indexPath.item].image
    let caseName = OLLData.list[indexPath.item].image

    cell.label.text = caseName
    cell.imageView.image = UIImage(named: image)



    return cell
}
}

然后我有另一个 swift 文件 (PhotoCell),其中有用于标签和 imageView 的 IBOutlets。

有什么方法可以做到这一点?

谢谢。

4

3 回答 3

2

您可以使用UICollectionViewDelegate方法来检测单元格上的点击,但首先要使用您需要UICollectionView确认的方法:delegateUIViewController

collectionView.delegate = self

在你的viewDidLoad方法中。

那么你需要更换

extension ViewController: UICollectionViewDataSource {

extension ViewController: UICollectionViewDataSource, UICollectionViewDelegate {

并使用委托方法

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

}

你可以得到选择的图像名称

let caseName = OLLData.list[indexPath.item].image
print(caseName)

看起来didSelectItemAt像:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let caseName = OLLData.list[indexPath.item].image
    print(caseName)
}

编辑:

您的extension遗嘱如下:

extension ViewController: UICollectionViewDataSource, UICollectionViewDelegate {

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return OLLData.list.count
    }

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

        let image = OLLData.list[indexPath.item].image
        let caseName = OLLData.list[indexPath.item].image

        cell.label.text = caseName
        cell.imageView.image = UIImage(named: image)



        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        let caseName = OLLData.list[indexPath.item].image
        print(caseName)
    }
}
于 2019-04-16T08:43:16.230 回答
1

您应该实现didSelectItemAt方法,然后像这样获取您选择的单元格:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! PhotoCell
    print(cell.imageView)
    print(cell.label)
}

希望这有帮助

于 2019-04-16T08:38:31.313 回答
1

UICollectionViewDelegate在 ViewController 中的最后一个扩展下方添加一个扩展:

extension ViewController: UICollectionViewDelegate {

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
       print(OLLData.list[indexPath.item].image)
    }
}
于 2019-04-16T08:39:40.970 回答