【问题标题】:Proper way to update collection view cell item from outside of collection view delegate class从集合视图委托类外部更新集合视图单元格项目的正确方法
【发布时间】:2020-11-16 15:11:14
【问题描述】:

当用户观看完广告后,我想从可见的收藏视图单元格中隐藏一个视图。所以在我的userDidEarn 委托方法中,我尝试更新我的可见单元格。 delgate 被完美触发但不知何故,它并没有隐藏我当前集合视图单元格上的视图。我在这里做错了什么?
提前致谢。

我的广告委托方法:

func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
    //Hide premiumHoverView from Cell
    guard let indexPath = self.mainCollectionView.indexPathsForVisibleItems.first else {
        return
    }
    
    let cell = self.mainCollectionView.cellForItem(at: indexPath) as! MainCollectionViewCell

    //        let cell = self.mainCollectionView.dequeueReusableCell(withReuseIdentifier: "MainCollectionViewCell", for: indexPath) as! MainCollectionViewCell
    
    cell.premiumItemHoverView.isHidden = true
    self.mainCollectionView.performBatchUpdates({
        self.mainCollectionView.reloadItems(at: [indexPath])
    }) { (isUpdated) in
        
    }
}

isUpdated 总是返回 false

我的收藏视图单元格:

class MainCollectionViewCell: UICollectionViewCell {

@IBOutlet weak var wallpaperImageView: UIImageView!
@IBOutlet weak var premiumItemHoverView: UIView!
@IBOutlet weak var gifImageView: UIImageView!
@IBOutlet weak var backgroundButton: UIButton!
@IBOutlet weak var watchVideoAdButton: UIButton!

func initializeCell(wallpaper: Wallpapers) {
    CustomLoader.instance.showLoaderView()
    
    if wallpaper.isPremimumItem == true {
        premiumItemHoverView.isHidden = false
        gifImageView.image = UIImage.gifImageWithName("addGif1")
    } else {
        premiumItemHoverView.isHidden = true
        gifImageView.image = nil
    }

    let imageUrl = CommonService.shared.getDeviceRatioWiseImageUrl(wallpaper: wallpaper)
    wallpaperImageView.image = nil
    wallpaperImageView.loadImageUsingCache(forURLString: imageUrl, withPlaceholderImageName: "") { (success) in
        if success {
            DispatchQueue.main.async {
                CustomLoader.instance.hideLoaderView()
            }
        }
    }
}

}

【问题讨论】:

  • self.mainCollectionView.indexPathsForVisibleItems.first 并不总是会给你想要的 indexPath
  • @RobertCrabtree 感谢您的评论。但它总是给我正确的索引。我打印了值,看起来还可以。如果没有,那还有什么选择?

标签: ios swift uicollectionview uicollectionviewcell uicollectionviewflowlayout


【解决方案1】:

您需要先编辑您的数据源,然后再删除 AD 单元格。

private func clearResultsAfterAd(_ indexPath: IndexPath) {
        
    dataSourceCells.remove(at: indexPath.item)
    collectionView.deleteItems(at: indexPath)
   
}

无需在您的 collectionView 上调用 reloadItems 或 reloadData。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多