UITableviewCell 中的 collectionView numberOfItemsInSection

Posted

技术标签:

【中文标题】UITableviewCell 中的 collectionView numberOfItemsInSection【英文标题】:collectionView numberOfItemsInSection in UITableviewCell 【发布时间】:2019-06-18 10:59:38 【问题描述】:

我在tableView 单元格中创建了一个collectionView

我注册了所有代表和协议,在大多数情况下一切正常

问题在于collectionView 必须根据服务器响应动态生成单元格

我在集合顶部安装了一个计数器,显示有多少单元格(也动态更新)

如果加载屏幕时集合在视野中,则加载单元格

如果需要完成收集,则为空,尽管计数器指示存在元素。

我不太明白为什么。代码如下

代码形式 VC:

 let realPfotoCell = tableView.dequeueReusableCell(withIdentifier: 
"RealPhoto", for: indexPath)
            as! RealPhotoCarInfoTableViewCell
        realPfotoCell.delegate = self


        realPfotoCell.model = self.rPhoto
        if(self.rPhoto?.data != nil)
            realPfotoCell.RPhotoCount.text = String(self.rPhoto.data!.count)
        



        cell = realPfotoCell
        cell.selectionStyle = UITableViewCell.SelectionStyle.none
    

来自tableViewCell的代码:

    var model: RealPhoto!

    func setCollectionViewDataSourceDelegate(dataSourceDelegate: UICollectionViewDataSource & UICollectionViewDelegate, forRow row: Int) 
        MyCollection.delegate = self
        MyCollection.dataSource = self
        MyCollection.reloadData()

    

    override func awakeFromNib() 
        super.awakeFromNib()
        // Initialization code
MyCollection.reloadData()
    

    override func setSelected(_ selected: Bool, animated: Bool) 
        super.setSelected(selected, animated: animated)

    



    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 

        if (self.model?.data?.count != nil)
            print("Photos here")
            print(self.model?.data!.count as Any)
         else 
            print("No photos")
        

        return self.model?.data?.count ?? 0

    

【问题讨论】:

在收到服务器响应后,您是否重新加载了collectionview 你的意思是collectionView.reloaddata()? collectionView.reloaddata() 我在awakeFromNib () 函数中执行此操作生成单元后,我没有重新启动,我无法弄清楚代码的哪一部分执行此操作。你能告诉我怎么做吗? 您需要在收到服务器响应后调用collectionView.reloaddata(),并将其保存在您的控制器中。 【参考方案1】:

请确保在您的服务器响应到来时调用 ReloadData()。

   //Server Response
    MyCollection.delegate = self
    MyCollection.dataSource = self
    MyCollection.reloadData()

【讨论】:

请求是在 VC 中发出的,但 collectionview 不是由它管理的,它是由 tableViewCell 管理的,所以在收到服务器的响应后,我无法从 VC 访问 myCollection 要做到这一点,她需要问 IBOutlet 但error: Illegal Configuration: The myCollection outlet from the DetailViewController to the UICollectionView is invalid. Outlets can't be connected to repeating content. 我已经在 UITableViewCell 单元格的协议中使用了你的函数 图片已加载,collectionView 已更新,但前提是立即显示。如果加载屏幕时的collectionView不在可移植性范围内 - 不会生成单元格【参考方案2】:

解决了

第一个在 tableview 单元格上创建这个函数:

func collectionReloadData()
        DispatchQueue.main.async(execute: 
            self.collectionView.reloadData()
        )
    

然后调用它

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell ...

realPfotoCell.collectionReloadData()

【讨论】:

***.com/questions/35621863/…

以上是关于UITableviewCell 中的 collectionView numberOfItemsInSection的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 中的 UIDatePicker 更新 UITableViewCell 文本标签

更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象

确定 UITableViewCell 中的 UIButton

UITableViewCell 事件中的 UIButton 不起作用

UITableViewCell 中的 UICollectionView

UITableVIewCell 中的 UIScrollView 不会滚动