Swift 自定义UILabel类不更改属性?

Swift 自定义UILabel类不更改属性?,swift,xcode,class,uilabel,Swift,Xcode,Class,Uilabel,我有一个自定义的UILabel类。我创建了一个CustomLabel并定位了它,但它没有我在customUILabel类中提供的属性 class CustomLabel: UILabel { override func awakeFromNib() { backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1) textColor = #colorLiteral(red: 1.

我有一个自定义的
UILabel
类。我创建了一个
CustomLabel
并定位了它,但它没有我在custom
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()
}

问题是您在
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()
}

啊这是有道理的。谢谢啊,这很有道理。非常感谢。