【问题标题】:UIButton TitleLabel - How to set UIButton's font when titleLabel is nil?UIButton TitleLabel - 当 titleLabel 为 nil 时如何设置 UIButton 的字体?
【发布时间】:2020-05-21 15:41:17
【问题描述】:

我正在尝试更改按钮类的字体(在启动按钮之前),但它不起作用。似乎“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)

【问题讨论】:

  • 如果您已经在继承UIButton,请在MMButton 类初始化中设置标题标签的字体?

标签: ios swift uibutton uilabel


【解决方案1】:

您可以在子类按钮设置中设置标题标签的字体:

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

【讨论】:

    【解决方案2】:

    最好的做法是@DonMag 说。如果你坚持使用外观,那么你需要在buttonClass.appearance()上设置titleFont而不是titleLabel?.text

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2022-11-29
      • 1970-01-01
      相关资源
      最近更新 更多