Segue 从选定的集合视图单元发送到错误的集合视图

Posted

技术标签:

【中文标题】Segue 从选定的集合视图单元发送到错误的集合视图【英文标题】:Segue from selected collection view cell sends to wrong collection view 【发布时间】:2019-08-20 07:51:37 【问题描述】:

我正在使用 swift。我正在尝试创建一个 collectionView segue 以导致一个新的 viewController。

我有一系列(假设8)不同的图像和标签作为CollectionView中的数组,并且选择时,我希望用户发送到另一个视图控制器(具有8种不同的可能性 - 每个单元格)。我已经能够构建应用程序,但是选择单元格的行为是错误的。

选择的第一个单元格没有响应,然后下一个单元格启动一个 segue - 但到之前选择的一个!每次选择不同的单元格时,它都将转到前一个选定的单元格。谁能帮我纠正这个错误?

我按照 youtube 上的不同教程分别使用了 performSegue 和 pushViewController,但每个都解决了相同的问题。

要在 main.storyboard 文件中为各种视图控制器分配了自己的 storyboardID。初始视图控制器嵌入在导航控制器中,并且每个新的 veiwcontroller(要继续)都已连接到主视图控制器的集合视图。

import UIKit

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource 

    @IBOutlet var CollectionView: UICollectionView!

    // created an array for labels

    let NamesForSectionTitles = ["Overview","Canopy trees","Mid-story trees","Understory plants","Birds","Mammals","Ferns","Butterflys"]

    // created list of images to be loaded in the collectionview

    let sectionIconImages: [UIImage] = [
    UIImage(named: "IMG_8750_landscape_night")!,
    UIImage(named: "IMG_8789_Trees")!,
    UIImage(named: "IMG_2185_Tree_Olearia")!,
    UIImage(named: "_MG_9528_Herb_Flower")!,
    UIImage(named: "IMG_3654-")!,
    UIImage(named: "IMG_9892-2")!,
    UIImage(named: "IMG_9496_Ferns_crozier")!,
    UIImage(named: "IMG_7707_Butterfly")!,

    ]

    override func viewDidLoad() 
        super.viewDidLoad()

// load the data sources and delegate

        CollectionView.dataSource = self
        CollectionView.delegate = self

    

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

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

        UICollectionViewCell 

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

            cell.SectionTitle.text = NamesForSectionTitles[indexPath.row]
            cell.sectionImages.image = sectionIconImages[indexPath.row]

            return cell

    

    // tells the collection view that upon selecting a cell, show the next UIView controller, as suggested in storyboard name (main.storyboard property) - tutoral from https://www.youtube.com/watch?v=pwZCksvXGRw&list=PLPUDRZDcNNsMdyfZVw4CJDT1Wu8cYx_6E&index=7&t=0s

    func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) 

        performSegue(withIdentifier: NamesForSectionTitles[indexPath.row], sender: self)

    

The viewer should see an image view with a label, that when selected takes them to a new collection view.

【问题讨论】:

【参考方案1】:

无法评论所以发布答案

我认为func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) 是造成问题的原因。

请尝试将该行更改为:

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

【讨论】:

哇!非常感谢PGDev。我没有注意到这一点。这完全解决了我的问题。

以上是关于Segue 从选定的集合视图单元发送到错误的集合视图的主要内容,如果未能解决你的问题,请参考以下文章

如何从自定义集合视图单元(使用 xib 创建的单元)到 tabBar 控制器创建自定义 segue

从集合视图执行 segue

如何从集合视图中删除多个选定的单元格? (迅速)

从选定的集合视图单元中获取信息

从 CollectionView Cell 以编程方式执行 Segue

如何从集合视图中的不可见单元格中删除自定义视图