我有 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/