如何将数据从集合视图传递到表视图类?

Posted

技术标签:

【中文标题】如何将数据从集合视图传递到表视图类?【英文标题】:How to pass data from collection view to table view class? 【发布时间】:2017-10-14 05:11:42 【问题描述】:

这里我有一个模型类,我需要将选定的 sku 值从集合视图传递到另一个类中的表视图,谁能帮我实现这个?

这里是didselect item at index path方法的代码

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

    // Here you can check which Collection View is triggering the segue
    if collectionView == firstCategory 

     else if collectionView == secondCategory 
        // from other CollectionView
    else if collectionView == newCollection
        newPassedSku = newModel[indexPath.item].sku as? String
        print(newPassedSku)
    else

    

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "firstCategorySegue" 
        _ = segue.destination as! ProductListViewController
    
    else if segue.identifier == "secondCategorySegue" 
        _ = segue.destination as! ProductListViewController
    else if segue.identifier == "newSegue"
        let detailsViewController = segue.destination as! ProductDetailsViewController
        detailsViewController.index = newPassedSku
        print(newPassedSku)
    
    else 
        _ = segue.destination as! ProductDetailsViewController
    

【问题讨论】:

func prepare(for segue 被调用? 它正在调用但无法传递我的价值@Mr.Bista if segue.identifier == "newSegue" 条件满足? 我尝试了一个新代码,但是在调用func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)之前发生了这种情况,它首先调用override func prepare(for segue: UIStoryboardSegue, sender: Any?),所以在其中传递了零值@Mr.Bista 是的,它满足@Mr.Bista 【参考方案1】:

你需要直接从你的collectionview控制器到tableview控制器,你从collectionview单元调用它,因此首先调用prepareforsegue

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
if collectionView == newCollection
    newPassedSku = newModel[indexPath.item].sku as? String
    self.performSegue(withIdentifier: "secondCategorySegue",
                      sender: nil)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
if segue.identifier == "newSegue"
    let detailsViewController = segue.destination as! ProductDetailsViewController
    detailsViewController.index = newPassedSku

【讨论】:

它正在传递 nil 值 但是在这个视图控制器中我有 4 个集合视图和一个视图,所以我怎么能像你说的那样通过 segue @user 提供您的故事板图片【参考方案2】:

您已经从 Collection Cell 而不是 ViewController 进行了直接 segue。这就是为什么在func collectionView(_ collectionView: UICollectionView, didSelectItemAt 之前调用override func prepare(for segue: UIStoryboardSegue, sender: Any?) 方法的原因。

所以你基本上确实需要从 View Controller 转到下一个 View Controller。

然后您必须手动调用 segue,例如: self.prepare(for: "segueIdentifier", any: nil)func collectionView(_ collectionView: UICollectionView, didSelectIt 方法内。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    if collectionView == newCollection
        newPassedSku = newModel[indexPath.item].sku as? String
        print(newPassedSku)
        self.prepare(for: "segueIdentifier", sender: newPassedSku)
    


override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "newSegue"
        guard index = sender as? String else 
            return //do not segue if index is not valid
        
        let detailsViewController = segue.destination as! ProductDetailsViewController
        detailsViewController.index = index
        print(newPassedSku)
    

【讨论】:

但是这里怎么传值呢?【参考方案3】:

当您需要从模型类传递数据时完美运行

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        if segue.identifier == "firstCategorySegue" 
            _ = segue.destination as! ProductListViewController
        
        else if segue.identifier == "secondCategorySegue" 
            _ = segue.destination as! ProductListViewController
        else if segue.identifier == "newSegue"
            let detailsViewController = segue.destination as! ProductDetailsViewController
            let indexPaths = self.newCollection.indexPathsForSelectedItems
            let indexPath = indexPaths?[0]
            let obj = newModel[(indexPath?.row)!]
            detailsViewController.index = obj.sku as! String
            print(obj.sku)
        
        else 
            _ = segue.destination as! ProductDetailsViewController
        
    

【讨论】:

以上是关于如何将数据从集合视图传递到表视图类?的主要内容,如果未能解决你的问题,请参考以下文章

如何将不同的数据从表视图传递到另一个视图控制器

如何从嵌入在视图控制器中的表视图中的集合视图中传递数据并推送新的视图控制器?

将数据从(设计时未知)SQLite db 动态显示到表视图

UITableViewCell 中的 UICollectionView 如何设置选择以将数据从当前视图传递到另一个视图

如何使用 Alamofire 和 SwiftyJSON 将数据发送到表视图

使用 SwiftJSON 将 Alamofire 结果 JSON 加载到表视图中