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