首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift中的外观代理/ UI_APPEARANCE_SELECTOR?

在Swift中的外观代理/ UI_APPEARANCE_SELECTOR?
EN

Stack Overflow用户
提问于 2014-10-02 22:17:38
回答 4查看 8.5K关注 0票数 50

苹果公司的文档称:

若要参与外观代理API,请在标头中使用UI_APPEARANCE_SELECTOR标记外观属性选择器。

在Objective中,可以用UI_APPEARANCE_SELECTOR来注释属性,如下所示:

代码语言:javascript
复制
@property (nonatomic, strong) UIColor *foregroundColor UI_APPEARANCE_SELECTOR;

我怎么能在Swift中做同样的事情呢?

EN

回答 4

Stack Overflow用户

发布于 2015-02-26 05:18:13

将您的自定义视图属性标记为dynamic

例如:

代码语言:javascript
复制
class YourCustomView: UIView {
    @objc dynamic var subviewColor: UIColor? {
        get { return self.yourSubview.backgroundColor }
        set { self.yourSubview.backgroundColor = newValue }
    }
    ...
}

然后:

代码语言:javascript
复制
YourCustomView.appearance().subviewColor = UIColor.greenColor()
票数 51
EN

Stack Overflow用户

发布于 2014-10-13 16:36:44

我没有找到解决办法,而是找到了解决办法。我没有对属性进行注释,而是将它们作为类变量。

代码语言:javascript
复制
private struct StarFillColor { static var _color = UIColor.blackColor() }
internal class var starFillColor: UIColor {
    get { return StarFillColor._color }
    set { StarFillColor._color = newValue }
}

在我设置所有外观的文件中:

代码语言:javascript
复制
MyClass.starFillColor = UIColor.r(181, g: 60, b: 109) 

我希望它能帮到别人!

票数 3
EN

Stack Overflow用户

发布于 2014-11-17 16:39:03

在Swift中,您不需要(实际上,不能)用UI_APPEARANCE_SELECTOR对属性进行注释。

只需确保外观属性访问器方法的形式为:

func propertyForAxis1(axis1: IntegerType,axis2: IntegerType,axisN: IntegerType) -> PropertyType func setProperty(property: PropertyType,forAxis1 axis1: IntegerType,axis2: IntegerType) 来源:https://developer.apple.com/documentation/uikit/uiappearancecontainer

例如:

代码语言:javascript
复制
func setStarViewColor(color: UIColor) {
    self.backgroundColor = color
}

然后,您可以像这样设置外观属性:

代码语言:javascript
复制
MyView.appearance().setStarViewColor(someColor)

我目前使用这个解决方案在我的Swift项目和它的工作,希望它对你也有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26170522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档