如何在 iOS 8 中通过外观代理设置 UIButton 字体?

How to set UIButton font via appearance proxy in iOS 8?(如何在 iOS 8 中通过外观代理设置 UIButton 字体?)

本文介绍了如何在 iOS 8 中通过外观代理设置 UIButton 字体?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试通过外观代理设置 UIButton 的字体.但这似乎不起作用.这是我尝试过的.

I tried to set the font of UIButton via appearance proxy. But it doesn't seem to work. This is what I tried.

UIButton.appearance().titleFont = UIFont(name: FONT_NAME_DEFAULT, size:20.0)UIButton.appearance().titleLabel?.font = UIFont(name: FONT_NAME_DEFAULT, size:20.0)

iOS 8中如何通过外观代理设置UIButton字体?

How to set UIButton font via appearance proxy in iOS 8 ?

编辑:在 vaberer 的 link:我很惊讶 UIButton 没有任何 UI_APPEARANCE_SELECTOR 属性,但符合 UIAppearance 协议."

EDIT: Found in vaberer's link: "I'm surprised that UIButton doesn't have any UI_APPEARANCE_SELECTOR properties, yet conforms to the UIAppearance protocol."

推荐答案

在支持主题的应用程序中遇到了同样的问题.

Had the same problem with a theme-able app.

// UIButton+TitleLabelFont.swift

import UIKit

extension UIButton {
    var titleLabelFont: UIFont! {
        get { return self.titleLabel?.font }
        set { self.titleLabel?.font = newValue }
    }
}

2.然后设置 UIButton 外观原型对象

2. Then setup the UIButton appearance prototype object

class Theme {
    static func apply() {
       applyToUIButton()
       // ...
    }

    // It can either theme a specific UIButton instance, or defaults to the appearance proxy (prototype object) by default
    static func applyToUIButton(a: UIButton = UIButton.appearance()) {
       a.titleLabelFont = UIFont(name: FONT_NAME_DEFAULT, size:20.0)
       // other UIButton customizations
    }
}

3.在应用委托中删除主题设置

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    Theme.apply()

    // ...

    return true
}

如果您早先预加载内容(lazy var 来自情节提要的 VC),最好不要使用应用委托设置主题内容,而是像这样在覆盖初始化程序中设置主题内容:

If you're preloading stuff (lazy var VCs from storyboards) earlier, it may be better to instead of using app delegate setup the theme stuff in an override initializer like so:

private var _NSObject__Theme_apply_token: dispatch_once_t = 0

extension NSObject {
    override public class func initialize() {
        super.initialize()
        // see also: https://stackoverflow.com/questions/19176219/why-am-i-getting-deadlock-with-dispatch-once
        var shouldRun = false
        dispatch_once(&_NSObject__Theme_apply_token) {
            shouldRun = true
        }
        if shouldRun {
            Theme.apply()
        }
    }
}

这篇关于如何在 iOS 8 中通过外观代理设置 UIButton 字体?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何在 iOS 8 中通过外观代理设置 UIButton 字体?