繁体   English   中英

在UITableViewCell子类中将UIView子类设置为IBOutlet

[英]Setting up UIView subclass as an IBOutlet in a UITableViewCell subclass

我有这个UIView子类,它返回带有渐变背景的视图

class GradientView: UIView {

override func drawRect(rect: CGRect) {

    var currentContext = UIGraphicsGetCurrentContext()

    CGContextSaveGState(currentContext);

    var colorSpace = CGColorSpaceCreateDeviceRGB()

    var startColor = UIColor(red: 195/255, green: 33/255, blue: 121/255, alpha: 1);
    var startColorComponents = CGColorGetComponents(startColor.CGColor)
    var endColor = UIColor(red: 134/255, green: 25/255, blue: 101/255, alpha: 1);
    var endColorComponents = CGColorGetComponents(endColor.CGColor)

    var colorComponents
    = [startColorComponents[0], startColorComponents[1], startColorComponents[2], startColorComponents[3], endColorComponents[0], endColorComponents[1], endColorComponents[2], endColorComponents[3]]

    var locations:[CGFloat] = [0.0, 1.0]

    var gradient = CGGradientCreateWithColorComponents(colorSpace,&colorComponents,&locations,2)

    var startPoint = CGPointMake(0, self.bounds.height)
    var endPoint = CGPointMake(self.bounds.width, self.bounds.height)

    CGContextDrawLinearGradient(currentContext,gradient,startPoint,endPoint, 0)

    CGContextRestoreGState(currentContext);
}

在Interface Builder中,在UITableView的原型单元之一中,我有一个GradientView。 我将ctrl拖到原型单元的UITableViewCell子类中,将渐变作为IBOutlet。

class GenericResultsHeaderCell: UITableViewCell {

    @IBOutlet weak var headerLabel: UILabel!
    @IBOutlet weak var headerIcon: UIImageView!
    @IBOutlet var backgroundView: GradientView!

}

但是我得到: Cannot override mutable property 'backgroundView' of type 'UIView?' with covariant type 'GradientView!' Cannot override mutable property 'backgroundView' of type 'UIView?' with covariant type 'GradientView!'

这是怎么了

我认为您的问题是UITableViewCell已经具有名为backgroundView的属性,并且您的IBOutlet会覆盖它。

以供参考

我要做的是重写UIStoryboard实例化单元的指定初始化程序。 我的子类可能看起来像这样:

class GenericResultsHeaderCell: UITableViewCell {

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        self.backgroundView = GradientView(frame: self.frame)
    }
} 

请记住,backgroundView将位于内容视图的下方,因此您可能看不到它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM