从集合视图执行 segue

Posted

技术标签:

【中文标题】从集合视图执行 segue【英文标题】:perform segue from collection view 【发布时间】:2018-02-22 07:54:10 【问题描述】:

我的目标是执行从集合视图单元到视图控制器的 segue。在下一个视图控制器中我有声明

 let selectedCar = CarViewController()

 if selectedCar.selectedMaker == "a"

我知道使用附加类执行 segue 的方法,但不知道如何使用集合视图执行。我将 indexPath 与 if else 语句一起使用。 Segue 名称是“toModels”

class CarsViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 

public var selectedMaker = ""

@IBOutlet weak var collectionView: UICollectionView!

let mainMenu = ["a","b"]

override func viewDidLoad() 
    super.viewDidLoad()

    collectionView.delegate = self
    collectionView.dataSource = self


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


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

    cell.imageCell.image = UIImage(named: mainMenu[indexPath.row])
    cell.labelCell.text = mainMenu[indexPath.row].capitalized

    return cell


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

    performSegue(withIdentifier: "toModels", sender: selectedMaker)

    if indexPath == [0, 0]
    
        selectedMaker = "a"
        print("a")
    
    else if indexPath == [0, 1]
    
        selectedMaker = "b"
        print("b")
    

【问题讨论】:

didSelectItemAt 工作正常。我认为将变量 selectedMaker 传递给下一个视图控制器时遇到问题 【参考方案1】:

试试这个编辑

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

    if indexPath.item == 0
    
        selectedMaker = "a"
        print("a")
    
    else if indexPath.item == 1
    
        selectedMaker = "b"
        print("b")
    
    performSegue(withIdentifier: "toModels", sender: selectedMaker)


override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    
        if (segue.identifier == "toModels")
        
            let objVC = segue.destination as! YOUR_NEXT_VIEWCONTROLLER
            objVC.strMaker = sender as? String ?? ""
        
    

在 YOUR_NEXT_VIEWCONTROLLER 中定义

public var strMaker = ""

【讨论】:

didSelectItemAt 工作正常。我认为将变量 selectedMaker 传递给下一个视图控制器时遇到问题 编辑了我的答案希望对您有所帮助!

以上是关于从集合视图执行 segue的主要内容,如果未能解决你的问题,请参考以下文章

在 tableview 中执行 segue 集合视图

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

Segue 不会执行 Swift

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

从 UIPageViewController 的根视图控制器执行 Segue

Swift UI集合视图 - 如何在Cell中显示“segued”用户输入?