自定义 UILabel 类不更改属性?



我有一个自定义UILabel类。我创建了一个CustomLabel并定位了它,但它没有我在自定义UILabel类中提供的属性。

class CustomLabel: UILabel {
override func awakeFromNib() {
backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
textColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
textAlignment = .center
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

这是我的视图控制器

class Controller: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let lblPos = CGRect(x: view.frame.size.width / 2 - 75 , y: 100, width: 150 , height: 30)
let samsungLbl = CustomLabel(frame: lblPos)
samsungLbl.text = "Samsung"
view.addSubview(samsungLbl)
}
}

问题是您在awakeFromNib方法中设置了属性。来自苹果文档

awakeFromNib((

nib 加载基础架构向从 nib 存档重新创建的每个对象发送 awakeFromNib 消息

因此,当您的对象从.xib文件或故事中加载时,将调用此方法。由于您通过调用init(frame: CGRect)以编程方式创建对象,因此永远不会调用您的awaktFromNib

您需要将安装代码移动到另一个方法中,并从初始值设定项调用。

func setupStyle() {
backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
textColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
textAlignment = .center
}
override init(frame: CGRect) {
super.init(frame: frame)
self.setupStyle()
}

最新更新