Напечатайте имя изображения на консоль из UICollectionView - PullRequest
1 голос
/ 16 апреля 2019

Я работаю с UICollectionView, где у меня есть 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
}
}

Затем у меня есть другой быстрый файл (PhotoCell), в котором у меня есть IBOutlets для метки и imageView.

Какие есть способы сделать это?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 16 апреля 2019

Вы можете использовать UICollectionViewDelegate метод, чтобы обнаружить нажатие на ячейку, но для использования этого прежде всего UICollectionView необходимо подтвердить delegate с помощью UIViewController, например:

collectionView.delegate = self

inваш 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)
    }
}
1 голос
/ 16 апреля 2019

Добавьте расширение для UICollectionViewDelegate ниже последнего расширения в вашем ViewController:

extension ViewController: UICollectionViewDelegate {

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
       print(OLLData.list[indexPath.item].image)
    }
}
1 голос
/ 16 апреля 2019

Вы должны реализовать метод didSelectItemAt, затем получить ячейку, которую вы выбрали следующим образом:

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

Надеюсь, эта помощь

...