gpt4 book ai didi

ios - 在 Swift 的自定义 UIView 子类中通过 UIAppearance 设置文本属性

转载 作者:搜寻专家 更新时间:2023-10-30 22:10:22 25 4
gpt4 key购买 nike

根据NSHipster ,“让自定义 UI 类符合 UIAppearance 不仅是最佳实践,而且它展示了对其实现的一定程度的关注。”

因此,我尝试将稍后用于创建 NSAttributedString 的文本属性设置为 var titleTextAttributes: [String : AnyObject]? 中的属性像这样的 UIView 子类:

func applyAppearance() {

UINavigationBar.appearance().translucent = true
UINavigationBar.appearance().tintColor = UIColor(named: .NavBarTextColor)
UINavigationBar.appearance().barTintColor = UIColor(named: .NavBarBlue)
UINavigationBar.appearance().titleTextAttributes = [
NSForegroundColorAttributeName: UIColor(named: .NavBarTextColor),
NSFontAttributeName: UIFont.navBarTitleFont()!
]

ActionBarView.appearance().backgroundColor = UIColor(white: 1, alpha: 0.15)
ActionBarView.appearance().titleTextAttributes = [
NSKernAttributeName: 1.29,
NSFontAttributeName: UIFont.buttonFont()!,
NSForegroundColorAttributeName: UIColor.whiteColor(),
]
}

这是从我的 AppDelegate 中截取的。

现在,在尝试设置 ActionBarView.appearance().titleTextAttributes = [ ... ] 时,出现以下运行时错误:

error when trying to set text attirbutes on a custom uiview subclass

值得一提的是,在 UINavigationBar 上设置属性没有任何问题。

转到 UINavigationBar 的头文件显示:

/* You may specify the font, text color, and shadow properties for the title in the text attributes dictionary, using the keys found in NSAttributedString.h.
*/
@available(iOS 5.0, *)
public var titleTextAttributes: [String : AnyObject]?

这与我的 ActionBarView 类中的属性定义完全相同:

class ActionBarView: UIView {

var titleTextAttributes: [String : AnyObject]?

// ...
}

所以我的问题是:在我自己的 UIView 子类中可以通过 UIAppearance 代理设置的带有文本属性字典的属性有什么我可以做的吗? 既然使用 UI_APPEARANCE_SELECTOR 在 Swift 中是不可能的? 为什么它可以开箱即用地用于像 UINavigationBar 这样的 UIKit 类?是否涉及某种黑魔法?

最佳答案

外观属性只需添加dynamic关键字:

class ActionBarView: UIView {

dynamic var titleTextAttributes: [String : AnyObject] = [:]

// use ActionBarView.appearance().titleTextAttributes
}

并且外观属性访问器方法必须属于 form:

func propertyForAxis1(axis1: IntegerType, axis2: IntegerType, axisN: IntegerType) -> PropertyType
func setProperty(property: PropertyType, forAxis1 axis1: IntegerType, axis2: IntegerType)

关于ios - 在 Swift 的自定义 UIView 子类中通过 UIAppearance 设置文本属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38508918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com