0

I want to hide a view from my visible collection view cell when user finish watching an ad. So in in my userDidEarn delegate method I try to update my visible cell. The delgate is triggered perfectly But somehow it's not hiding the view on my current collection view cell. What am I doing wrong here?
Thanks in advance.

My ad delegate method:

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 always returns false.

My collection view cell:

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()
            }
        }
    }
}

}

Avow Studio
  • 87
  • 3
  • 8
  • 1
    `self.mainCollectionView.indexPathsForVisibleItems.first` isn't always going to give you the indexPath you want – Rob C Jul 27 '20 at 10:00
  • @RobertCrabtree Thanks for your comment. But It always gives me the right index. I printed the value and it seems ok. If not then what would be the alternative? – Avow Studio Jul 27 '20 at 10:06

1 Answers1

0

You need to edit your data source first and then delete AD cell.

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

No need to call reloadItems or reloadData on your collectionView.

Pete Streem
  • 360
  • 5
  • 14