UIButton TitleLabel - Как установить шрифт UIButton, когда titleLabel равен нулю? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь изменить шрифт класса кнопки (до того, как кнопка будет инициирована), но она не работает. Кажется, что "titleLabel" является проблемой, поскольку он равен nil.

guard let object = NSClassFromString(button.key) as? UIButton.Type else { return }
let buttonClass = object.self

buttonClass.appearance().titleLabel?.text = UIFont(name: "HelveticaNeue-Thin", size: 20)

Здесь titleLabel равен nil, поэтому он не будет работать.

Я также попытался установить метку шрифт в моем классе (MBButton - мой класс), но это также не работает

UILabel.appearance(whenContainedInInstancesOf[MBButton.self]).font = UIFont(name: "HelveticaNeue-Thin", size: 20)

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Вы можете установить шрифт метки заголовка в настройках подклассных кнопок:

@IBDesignable
class MMButton: UIButton {
    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        commonInit()
    }
    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        commonInit()
    }
    func commonInit() -> Void {
        titleLabel?.font = UIFont(name: "HelveticaNeue-Thin", size: 20)
        // other customization here...
    }
}

В качестве альтернативы, если вы хотите использовать метод .appearance(), добавьте расширение:

class MMButton: UIButton {
    // whatever you're doing for customization
}

extension MMButton {
    @objc dynamic var titleLabelFont: UIFont! {
        get { return self.titleLabel?.font }
        set { self.titleLabel?.font = newValue }
    }
}

тогда

MMButton.appearance().titleLabelFont = UIFont(name: "HelveticaNeue-Thin", size: 20)
0 голосов
/ 05 февраля 2020

Лучше всего было бы, сказал @DonMag. Если вы настаиваете на использовании внешнего вида, вам нужно установить titleFont на buttonClass.appearance() вместо titleLabel?.text

...