0

我在我的 IF 子句中,在 cellForRowAtIndexPath 方法中做到了这一点:

let blurEffect = UIBlurEffect(style: .Light)
        let visualEffect = UIVisualEffectView(effect: blurEffect)

        visualEffect.frame = cell.attachedImage.bounds

        cell.attachedImage.addSubview(visualEffect)

在我的 ELSE 子句中,我想从 cell.attachedImage 中删除效果。

我该怎么做?

4

2 回答 2

3

cellForRowAtIndexPath不应该向单元格添加子视图。这是有问题的,因为单元格会被重用,如果您不保留对已添加内容的引用,您最终会多次添加视图,这可能会导致滚动速度问题以及其他错误。

正确的方法是创建一个已经设置了视图的单元子类。您的子类可以包含引用视图的属性,以便您可以根据需要更改、隐藏、移动或从其父视图中删除它们。但是这个逻辑应该在单元子类中。

于 2016-01-15T19:36:42.963 回答
0

您只需要从它的超级视图中删除视觉效果视图。诀窍是在细胞被回收时找到要删除的正确视图。最简单的方法是将其存储在自定义UITableViewCell实现中:

class CustomTableViewCell: UITableViewCell {
    var visualEffectView: UIView?
    var attachedImage: UIImageView!
    // other views, including outlets

    func setupIsBlurred(isBlurred: Bool) {
        if isBlurred {
            if self.visualEffectView == nil {
                let blurEffect = UIBlurEffect(style: .Light)
                let visualEffectView = UIVisualEffectView(effect: blurEffect)

                visualEffectView.frame = self.attachedImage.bounds

                self.attachedImage.addSubview(visualEffectView)

                self.visualEffectView = visualEffectView
            }
        } else {
            self.visualEffectView?.removeFromSuperview()
            self.visualEffectView = nil
        }
    }
}
于 2016-01-15T19:41:31.633 回答