我希望所有UINavigationBar
个对象在其[NSFontAttributeName: UIFont(name: "Soft Elegance", size: 18)!]
属性中具有默认值titleTextAttributes
。
在UIViewController
中,我就是这样设置的:
override func viewDidLoad() {
super.viewDidLoad()
navigationController!.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Soft Elegance", size: 18)!]
}
但是,我有几个UIViewControllers
都需要这行代码。我知道extensions
可以为整个班级提供行为,但我没有为我的案例做到这一点:
extension UINavigationBar {
var titleTextAttributes: [NSObject: AnyObject]! {
return [NSFontAttributeName: UIFont(name: "Soft Elegance", size: 18)!]
}
}
有没有办法通过extensions
完成此操作?
答案 0 :(得分:2)
您想要UIAppearance
:
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: UIFont(name: "Soft Elegance", size: 18)!]
这会影响应用中的所有UINavigationBars。
答案 1 :(得分:1)
根据Swift Programming Guide,Swift中的扩展程序可以:
扩展程序用于扩展/添加新行为,您需要的是覆盖默认行为。您可以通过子类UINavigationBar
或UIViewController
来实现此目的,
class BaseViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationController!.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Soft Elegance", size: 18)!]
}
}
然后使用BaseViewController
替换现有的UIViewController