Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 从UICollectionView将图像名称打印到控制台_Swift_Xcode_Swift5 - Fatal编程技术网

Swift 从UICollectionView将图像名称打印到控制台

Swift 从UICollectionView将图像名称打印到控制台,swift,xcode,swift5,Swift,Xcode,Swift5,我正在使用UICollectionView,其中我有一个带有轻触手势识别器的UIImage作为我的CollectionView的单元模型。我也有57个不同名称的图像,我想打印到控制台上,这取决于我点击的图像 这是我的密码: import UIKit class ViewController: UIViewController { let OLLData = OLLCases() // MARK: - Outlets @IBOutlet weak var

我正在使用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
}
}
然后我有另一个swift文件光电管,在那里我有标签和图像视图的IBOutlets

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

谢谢。

您应该实现didSelectItemAt方法,然后按如下方式获取您选择的单元格:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! PhotoCell
    print(cell.imageView)
    print(cell.label)
}
希望获得此帮助

您应该实现didSelectItemAt方法,然后按如下方式获取您选择的单元格:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! PhotoCell
    print(cell.imageView)
    print(cell.label)
}
希望此帮助在ViewController中的最后一个扩展名下面添加UICollectionViewDelegate的扩展名:

extension ViewController: UICollectionViewDelegate {

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
       print(OLLData.list[indexPath.item].image)
    }
}
在ViewController中的最后一个扩展名下面添加UICollectionViewDelegate的扩展名:

extension ViewController: UICollectionViewDelegate {

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
       print(OLLData.list[indexPath.item].image)
    }
}
您可以使用UICollectionViewDelegate方法来检测单元格上的点击,但要使用该方法,首先,您的UICollectionView需要使用UIViewController确认该委托,如:

在viewDidLoad方法中

那么你需要换一个

extension ViewController: UICollectionViewDataSource {

并使用委托方法

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 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)
    }
}
编辑:

您的扩展将如下所示:

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

    let caseName = OLLData.list[indexPath.item].image
    print(caseName)
}
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)
    }
}
您可以使用UICollectionViewDelegate方法来检测单元格上的点击,但要使用该方法,首先,您的UICollectionView需要使用UIViewController确认该委托,如:

在viewDidLoad方法中

那么你需要换一个

extension ViewController: UICollectionViewDataSource {

并使用委托方法

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 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)
    }
}
编辑:

您的扩展将如下所示:

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

    let caseName = OLLData.list[indexPath.item].image
    print(caseName)
}
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)
    }
}

所以你想检测点击图像或整个单元格?最好是图像,但不太重要。那么你想检测点击图像或整个单元格?最好是图像,但不太重要。谢谢,但我很困惑-我是否将DIDSelectItems与NumberOfItems选择功能放在同一级别?是的,您需要将其与NumberOfItems选择功能放在一起好的,谢谢。但是,我想我需要移除轻触手势识别器才能使其工作?如果轻触图像对您不重要,则可以。很乐意帮助..:谢谢,但我很困惑-我是否将DIDSelectItems设置为与NumberOfItems选择功能相同的级别?是的,您需要将其与NumberOfItems选择功能一起设置好的,谢谢。但是,我想我需要移除轻触手势识别器才能使其工作?如果轻触图像对您不重要,则可以。很乐意帮助..: