How to set UIButton font via appearance proxy in iOS 8?(如何在 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 字体?
基础教程推荐
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01