从 API 填充 TableView 内的 CollectionView

Posted

技术标签:

【中文标题】从 API 填充 TableView 内的 CollectionView【英文标题】:Populating CollectionView which is inside TableView from API 【发布时间】:2017-12-01 12:54:46 【问题描述】:

我正在使用 alamofire 在模型类的帮助下从数组内的 API 存储中获取数据。 现在我想在 TableView 内的 CollectionView 中显示这些数据。因此,传递该数组来显示数据是一个问题,这里有一些代码,看看你是否能找到问题。

如果你想让我给你更多信息,请告诉我

tableview 的 cellforrowat

if let cell = tableView.dequeueReusableCell(withIdentifier: "HeadlineRow", for: indexPath) as? HeadlineRow 

            let latest = self.latest[indexPath.section]
            cell.updateUI(latest: latest)

            return cell
        

tableviewcell 类

var latestNews = [LatestNews]()

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

        if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HeadlineCell", for: indexPath) as? HeadlineCell 

            let latest = self.latestNews[indexPath.row]
            cell.updateUI(latest: latest)

            return cell
        

        return UICollectionViewCell()
    

    func updateUI(latest: LatestNews) 
        self.latestNews.append(latest)
    

集合视图类

func updateUI(latest: LatestNews)

        self.headlineImg.sd_setImage(with: URL(string: latest.thumbnail))
        headlineTextView.text = latest.headline
    

所以问题基本上是我如何将数组从 MainViewController 转移到自定义 TableView 类到自定义 Collection View 类。

【问题讨论】:

请准确告诉我们您遇到了什么问题以及您在哪里苦苦挣扎。 “看看你是否发现问题”不是很具体。 我在最后写了一个小笔记 我猜你传递“latestNews”的方式相同。这不是你想要的吗? 【参考方案1】:

UITableViewCell 类:

class MyTableViewCell: UITableViewCell,UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout

 var data : [SomeData]?

@IBOutlet var collectionView: UICollectionView! // initialize your collectionview from storyboard

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


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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCellIdentifier", for: indexPath) as! MyCustomCollectionViewCell
    return cell

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat 
    return 0

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    return CGSize(width: 100, height: 100)

func initCollection()

    self.collectionView.dataSource = self
    self.collectionView.delegate = self
    self.collectionView.register(UINib(nibName:"MyCustomCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "myCellIdentifier")



func setData(data: [SomeData])

    self.data = data
    self.initCollection()
    self.collectionView.reloadData()


tableview 的 cellForRowAt:

let cell = tableView.dequeueReusableCell(withIdentifier: "MyTableViewCellIdentifier", for: indexPath) as! MyTableViewCell
cell.setData(data: yourArray)

您还可以从 cellForRowAt 初始化“数据”数组,例如:

cell.data = yourArray

这是我为我的项目完成的示例,其中包含 tableviewcell 中的水平集合视图

【讨论】:

以上是关于从 API 填充 TableView 内的 CollectionView的主要内容,如果未能解决你的问题,请参考以下文章

REST API:无法填充 Tableview

viewController 内的 tableview 中没有显示任何信息

Swift 如何在从 API 接收数据后填充我的 tableView

从单个数组数据和多个部分填充 tableView

获取 JSON 数据以从数组中填充 TableView

从 NSDictionary 填充 tableview