Пользовательский класс UILabel не меняет свойства? - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть пользовательский 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")
    }
}

, и вот мой ViewController

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)
    }
}

1 Ответ

0 голосов
/ 21 сентября 2018

Проблема в том, что вы устанавливаете свойства в методе awakeFromNib.От Документация Apple

awakeFromNib ()

Инфраструктура загрузки nib отправляет сообщение awakeFromNib каждому объекту, воссозданному из архива nib

Таким образом, этот метод вызывается, когда ваш объект загружается из файла .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()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...