ios - CollectionViewCell 的事件指示器未禁用

标签 ios swift uicollectionview uicollectionviewcell uiactivityindicatorview

我有 3 个单元格的 Collection View 。我在它们上面显示图像,但是,因为从服务器获取图像数据需要几秒钟,所以我使用 nsuserdefaults 和缓存。

let imagesFromUserDefaults
var dataIsFetched = false

viewDidLoad() {
   let imagesFromUserDefaults = // Data from user defaults
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

   let cell = self.collectionView.dequeueReusableCellWithReuseIdentifier("ACollectionViewCell", forIndexPath: indexPath) as! ACollectionViewCell

   let activityView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
   activityView.hidesWhenStopped = true

   if dataIsFetched == false {
        activityView.center = CGPointMake( cell.contentView.frame.size.width / 2, cell.contentView.frame.size.height / 2) 

        cell.contentView.addSubview(activityView)
        activityView.startAnimating()

        cell.img = // set image - works
   } else {
        // Data is fetched from the Server
        activityView.stopAnimating()

        cell.img = // set image - works
   }

func fetchDataFromServer() {
     // onSuccessResponse: Store into Array

     dataIsFetched = true
     collectionView.reloadData()
}

然而,在加载服务器数据后,即使图像发生变化,事件指示器也不会消失。因此,如果单元格具有相同的 indexPath.row(图像也证明了这一点),为什么事件指示器不会发生这种情况?


此外,将此行为放在 CollectionViewCell 类中是否更合乎逻辑?正确的处理方法是什么


编辑:

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

        if initialLoad {
            count = self.defaults.count
        } else {
            count = self.fetched[0].count
        }

        print("number of cells \(count)")
        if count < 4 {
            return count
        }

        return 0

    }

最佳答案

你需要设置

let activityView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
activityView.hidesWhenStopped = true

您还可以设置 activityView.center = cell.center 以获得更清晰的代码。

关于ios - CollectionViewCell 的事件指示器未禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36808433/

相关文章:

ios - 延迟加载 map View 注释的算法

php - 如何使用 Swift 将字符串加密为 base64 中的 sha1?

ios - 请求接收推送操作的权限

ios - Swift ios - 将 key=value 文本文件读入 nsdictionary

ios - UITableView 标题背景颜色没有完全改变

ios - 在 StoreKit 拒绝交易

ios - 尝试将文本附加到 Swift 循环内的属性

ios - UICollectionView 到 UICollectionViewCell

swift - 编程式滚动 Apple TV 轻拂单元格

ios - UICollectionViewFlowLayout 中有多个补充 View ?