在 UITableViewCell 子类中将 UIView 子类设置为 IBOutlet
Setting up UIView subclass as an IBOutlet in a UITableViewCell subclass
我有这个 UIView 子类,它 returns 具有渐变背景的视图
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!'
这里出了什么问题?
我认为您的问题是 UITableViewCell 已经有一个名为 backgroundView 的 属性 并且您的 IBOutlet 会覆盖它。
我要做的是覆盖 UIStoryboard 实例化单元的指定初始化程序。我的子类可能如下所示:
class GenericResultsHeaderCell: UITableViewCell {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.backgroundView = GradientView(frame: self.frame)
}
}
请记住,背景视图将位于内容视图下方,因此您可能看不到它。
我有这个 UIView 子类,它 returns 具有渐变背景的视图
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!'
这里出了什么问题?
我认为您的问题是 UITableViewCell 已经有一个名为 backgroundView 的 属性 并且您的 IBOutlet 会覆盖它。
我要做的是覆盖 UIStoryboard 实例化单元的指定初始化程序。我的子类可能如下所示:
class GenericResultsHeaderCell: UITableViewCell {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.backgroundView = GradientView(frame: self.frame)
}
}
请记住,背景视图将位于内容视图下方,因此您可能看不到它。