Appearance proxies / UI_APPEARANCE_SELECTOR in Swift?
Mark your custom view property as dynamic
.
For example:
class YourCustomView: UIView { @objc dynamic var subviewColor: UIColor? { get { return self.yourSubview.backgroundColor } set { self.yourSubview.backgroundColor = newValue } } ...}
Then:
YourCustomView.appearance().subviewColor = UIColor.greenColor()
I did not find the solution but a workaround.Instead of annotating the properties I made them as a class variable.
private struct StarFillColor { static var _color = UIColor.blackColor() }internal class var starFillColor: UIColor { get { return StarFillColor._color } set { StarFillColor._color = newValue }}
And in the file where I setup all my appearances:
MyClass.starFillColor = UIColor.r(181, g: 60, b: 109)
I hope it will help somebody!
Based on previous answers, here is the extension to UIView I implemented to manage UIView appearance with view borders, I hope it can help someone :
extension UIView { @objc dynamic var borderColor: UIColor? { get { if let color = self.layer.borderColor { return UIColor(cgColor: color) } else { return nil } } set(color) { self.layer.borderColor = color?.cgColor } } @objc dynamic var borderWidth: NSNumber? { get { return NSNumber(value: Float(self.layer.borderWidth))} set(width) { self.layer.borderWidth = CGFloat(width?.floatValue ?? 0) } } @objc dynamic var cornerRadius: NSNumber? { get { return NSNumber(value: Float(self.layer.cornerRadius))} set(radius) { self.layer.cornerRadius = CGFloat(radius?.floatValue ?? 0) } }}