Swift中的外观代理/ UI_APPEARANCE_SELECTOR?

Kla*_*aas 47 uikit uiappearance swift

Apple文档说明:

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

在Objective-C中,可以使用以下方法注释属性UI_APPEARANCE_SELECTOR:

@property (nonatomic, strong) UIColor *foregroundColor UI_APPEARANCE_SELECTOR;
Run Code Online (Sandbox Code Playgroud)

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

Yoi*_*aya 48

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

例如:

class YourCustomView: UIView {
    @objc dynamic var subviewColor: UIColor? {
        get { return self.yourSubview.backgroundColor }
        set { self.yourSubview.backgroundColor = newValue }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后:

YourCustomView.appearance().subviewColor = UIColor.greenColor()
Run Code Online (Sandbox Code Playgroud)


Kev*_*ord 3

我没有找到解决方案,而是找到了解决方法。我没有将属性注释为类变量。

private struct StarFillColor { static var _color = UIColor.blackColor() }
internal class var starFillColor: UIColor {
    get { return StarFillColor._color }
    set { StarFillColor._color = newValue }
}
Run Code Online (Sandbox Code Playgroud)

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

MyClass.starFillColor = UIColor.r(181, g: 60, b: 109) 
Run Code Online (Sandbox Code Playgroud)

我希望它能帮助别人!