将值从 uitableview 传递到 uicollectionview

Posted

技术标签:

【中文标题】将值从 uitableview 传递到 uicollectionview【英文标题】:passing values from uitableview to uicollectionview 【发布时间】:2016-11-07 07:38:36 【问题描述】:

如何将解析后的值从已在 UITableview 中使用的 url 传递到已在每个 UITableviews 单元格中使用的 UICollectionview(水平滚动)?我想用 swift 语言来做这件事。

我正在使用名为“collectionCat”的模型。

import Foundation

public class CollectionCat



    var brandid:String = ""
    var brandname:String = ""
    var result:String = ""
    var noitems:String = ""




我也在使用 Alamofire 来解析来自 url 的数据。

override func viewDidLoad() 
    super.viewDidLoad()

    self.startActivityAnimating(message: "", type: NVActivityIndicatorType.BallClipRotate, color: AppColor.AppRed, padding: 10)
    Alamofire.request(.POST, "http://goringr.co.in/Mathrubhumi_project_ios/brand.php", parameters: ["": ""])
        .validate()
        .responseJSON  response in
            switch response.result 
            case .Success:
                print("Validation Successful")
                self.jsonResultParse(response.result.value!)
                self.stopActivityAnimating()
            case .Failure(let error):
                print(error)
                self.stopActivityAnimating()
                // return userCatagory
            


    


    // Do any additional setup after loading the view.

  if JSONArray.count != 0 
        //_ = [UserCatagory]()


        for i:Int in 0 ..< JSONArray.count  

            let jObject = JSONArray[i] as! NSDictionary

            let uCollect:CollectionCat = CollectionCat()
            uCollect.brandid = (jObject["brandid"] as AnyObject? as? String) ?? ""
            uCollect.brandname = (jObject["brandname"] as AnyObject? as? String) ?? ""
            uCollect.result = (jObject["result"] as AnyObject? as? String) ?? ""
            uCollect.noitems = (jObject["noitems"] as AnyObject? as? String) ?? ""

            collect.append(uCollect)
            print("collect COUNT ",collect.count)
        

        self.newTable.reloadData()

    




我不知道如何将存储的数据传输到 UICollection 视图,该视图位于上述 UITableview 的每个单元格中。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
   // collectMaster = collect[indexPath.row]

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!  SecondHomeViewCell

   // collectMaster = CollectionCat()
    cell.get = ????

    return cell

谁能帮帮我?

SecondHomeViewCell 的代码是这样的。

import UIKit
import Kingfisher
import Alamofire
import NVActivityIndicatorView



class SecondHomeViewCell: UITableViewCell

    @IBOutlet weak var collectionView: UICollectionView!



    var genre:CollectionCat? = nil
    didSet 
                collectionView.reloadData()

            

    




     func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        //return genre!.brandid

       // return genre
        return 1
    

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("secondHome", forIndexPath: indexPath) as! SecondHomeCollectionViewCell

             if let genre = genre 
            cell.genre = genre.brandid[indexPath.row]

        

        return cell
    

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
        let itemsPerRow:CGFloat = 4
        let hardCodedPadding:CGFloat = 5
        let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding
        let itemHeight = collectionView.bounds.height - (2 * hardCodedPadding)
        return CGSize(width: itemWidth, height: itemHeight)
    




【问题讨论】:

你能把SecondHomeViewCell类的代码包含进来 在您的 SecondHomeViewCell 中,通过故事板添加集合视图 @IBOutlet weak var collectionView: UICollectionView! , cell.setData(collect[indexPath.row) , 并在setData内部,将此数组设置为collection view的数据模型 【参考方案1】:

在你的 ViewController 中添加一个数组,调用它

var collCat = [CollectionCat]()


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
   let collectMaster = collCat[indexPath.row]

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!  SecondHomeViewCell


    cell.brandID = collectMaster.brandid
    //and so on

    return cell

如果这不是您要寻找的答案,请告诉我。因为我想澄清,但我还没有能力发表评论。我需要达到 50 声望才能发表评论并要求澄清。

【讨论】:

刚才我已经添加了secondHomeViewCell的代码。你能不能也调查一下,也给我一个答案,包括那个。 能否请您告诉我如何在SecondHomeViewCell中调用它【参考方案2】:

您可以通过在 UITableviewCell 自定义类中创建函数来将数据传递给集合视图

class SecondHomeViewCell: UITableViewCell
//Array containing modals for particular tableview cell index path  


 var arrDataFromViewController = NSArray()
    func getData(arrData:NSArray)
        arrDataFromViewController = arrData
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.reloadData()
        


    @IBOutlet weak var collectionView: UICollectionView!



    var genre:CollectionCat? = nil
    didSet 
                collectionView.reloadData()

            

    




     func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        //return genre!.brandid

       // return genre
        return 1
    

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("secondHome", forIndexPath: indexPath) as! SecondHomeCollectionViewCell

             if let genre = genre 
            cell.genre = genre.brandid[indexPath.row]

        

        return cell
    

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
        let itemsPerRow:CGFloat = 4
        let hardCodedPadding:CGFloat = 5
        let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding
        let itemHeight = collectionView.bounds.height - (2 * hardCodedPadding)
        return CGSize(width: itemWidth, height: itemHeight)
    




//现在在tableview数据源方法

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
   // collectMaster = collect[indexPath.row]

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as!  SecondHomeViewCell

   // collectMaster = CollectionCat()
    cell.getData =  yourArray[indexPath.row]//Get Array data

    return cell

【讨论】:

以上是关于将值从 uitableview 传递到 uicollectionview的主要内容,如果未能解决你的问题,请参考以下文章

将值从表视图控制器传递到视图控制器

将值从 BackgroundWorker DoWork 传递到 BackgroundWorker Completed

将值从 ngOnInit 传递到模板

JSP 将值从表传递到表单

将值从 php 传递到 modal

如何将值从 tableview 传递到 collectionview