如何在UIImageView.image仍为空时禁用UICollectionViewCell的用户交互

时间:2015-12-02 20:23:33

标签: ios swift uicollectionview

是否可以将UICollectionViewCell userInteractionEnabled设置为false,而imageView仍然为空,或者不要让performsegue到详细视图?我试图这样做,但不起作用。以下示例方法:

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

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CustomCollectionViewCell
            dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {


                cell.userInteractionEnabled = false
                cell.products.image = UIImage(named: "placeholderImage")
                cell.activityIndicator.startAnimating()
                let p = self.products[indexPath.row] as Product

                if let img = UIImage(data: p.productImage) {
                    cell.products.image = img
                }
                else {

                    self.loadImages(p, indexPath: indexPath)
                }

                dispatch_async(dispatch_get_main_queue()) {
                    // update some UI

                    cell.activityIndicator.stopAnimating()
                    cell.userInteractionEnabled = true

                }

            }



    return cell
}

1 个答案:

答案 0 :(得分:0)

我认为你正在使用dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0))。您正在其中放置U​​I更新(即启动微调器动画),这是错误的。我理解你想要使用异步图像加载的代码,以及我肯定建议使用的代码 SDWebImage library这样做。这是一个很棒的库,可以很好地加载异步图像。

只需使用它并将所有代码放在主线程中,这样就不需要使用任何dispatch_async。