@IBDesignable 在 IB 中不显示背景颜色
@IBDesignable not showing background color in IB
我有一个如下所示的 UIView:
import UIKit
@IBDesignable
class CHRAlertView: UIView {
@IBOutlet var icon:UILabel!
@IBOutlet var alertText:UITextView!
override init(frame: CGRect) {
super.init(frame: frame)
self.initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initialize()
}
private func initialize(){
self.backgroundColor = UIColor.green
}
}
根据@IBDesignable 的工作原理,这应该以绿色背景显示在 IB 中,但我得到的清晰颜色如下:
为什么这没有按预期运行?我需要根据我的@IBDesignable 中设置的默认值在 IB 中显示背景颜色。
由于 backgroundColor
是一个 IB 属性 不是通过 @IBInspectable 创建的,它似乎总是覆盖 init 或 draw 方法中的任何内容。意思是,如果它在 IB 中是 "default",它会导致它被 nil 覆盖。但是,如果在 prepareForInterfaceBuilder
方法中设置,backgroundColor 将起作用并显示在 IB 中。因此,可以合理地假设 backgroundColor
必须在运行时设置。为此,我有以下内容:
//------------------
//Setup and initialization
//------------------
override init(frame: CGRect) {
super.init(frame: frame)
self.initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initialize()
}
//Setups content, styles, and defaults for the view
private func initialize(){
self.staticContent()
self.initStyle()
}
//Sets static content for the view
private func staticContent() {
}
//Styles the view's colors, borders, etc at initialization
private func initStyle(){
}
//Styles the view for variables that must be set at runtime
private func runtimeStyle(){
if self.backgroundColor == nil {
self.backgroundColor = UIColor.green
}
}
override func prepareForInterfaceBuilder() {
self.runtimeStyle()
}
override func awakeFromNib() {
super.awakeFromNib()
self.runtimeStyle()
}
如果在 IB 中它是 "default"(读取 nil),这会将背景颜色默认为一种颜色,但如果在 IB 中设置了背景颜色,则不使用 UIColor.green,这正是我需要。
在#swift-lang irc 中感谢 Eridius 帮助我得到这个答案。
我有一个如下所示的 UIView:
import UIKit
@IBDesignable
class CHRAlertView: UIView {
@IBOutlet var icon:UILabel!
@IBOutlet var alertText:UITextView!
override init(frame: CGRect) {
super.init(frame: frame)
self.initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initialize()
}
private func initialize(){
self.backgroundColor = UIColor.green
}
}
根据@IBDesignable 的工作原理,这应该以绿色背景显示在 IB 中,但我得到的清晰颜色如下:
为什么这没有按预期运行?我需要根据我的@IBDesignable 中设置的默认值在 IB 中显示背景颜色。
由于 backgroundColor
是一个 IB 属性 不是通过 @IBInspectable 创建的,它似乎总是覆盖 init 或 draw 方法中的任何内容。意思是,如果它在 IB 中是 "default",它会导致它被 nil 覆盖。但是,如果在 prepareForInterfaceBuilder
方法中设置,backgroundColor 将起作用并显示在 IB 中。因此,可以合理地假设 backgroundColor
必须在运行时设置。为此,我有以下内容:
//------------------
//Setup and initialization
//------------------
override init(frame: CGRect) {
super.init(frame: frame)
self.initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initialize()
}
//Setups content, styles, and defaults for the view
private func initialize(){
self.staticContent()
self.initStyle()
}
//Sets static content for the view
private func staticContent() {
}
//Styles the view's colors, borders, etc at initialization
private func initStyle(){
}
//Styles the view for variables that must be set at runtime
private func runtimeStyle(){
if self.backgroundColor == nil {
self.backgroundColor = UIColor.green
}
}
override func prepareForInterfaceBuilder() {
self.runtimeStyle()
}
override func awakeFromNib() {
super.awakeFromNib()
self.runtimeStyle()
}
如果在 IB 中它是 "default"(读取 nil),这会将背景颜色默认为一种颜色,但如果在 IB 中设置了背景颜色,则不使用 UIColor.green,这正是我需要。
在#swift-lang irc 中感谢 Eridius 帮助我得到这个答案。