Proxy de apariencia/UI_APPEARANCE_SELECTOR en Swift?
uikit uiappearance (3)
La documentación de Apple establece:
Para participar en la API del proxy de apariencia, marque sus selectores de propiedades de apariencia en su encabezado con UI_APPEARANCE_SELECTOR.
En Objective-C se pueden anotar propiedades con UI_APPEARANCE_SELECTOR
esta manera:
@property (nonatomic, strong) UIColor *foregroundColor UI_APPEARANCE_SELECTOR;
¿Cómo puedo hacer lo mismo en Swift?
En Swift, no necesita (en realidad no puede) anotar propiedades con UI_APPEARANCE_SELECTOR
.
Solo asegúrese de que los métodos de acceso a la propiedad de su apariencia sean de la forma:
func propertyForAxis1(axis1: IntegerType, axis2: IntegerType, axisN: IntegerType) -> PropertyType
func setProperty(property: PropertyType, forAxis1 axis1: IntegerType, axis2: IntegerType)
Por ejemplo:
func setStarViewColor(color: UIColor) {
self.backgroundColor = color
}
A continuación, puede establecer su propiedad apariencia como esta:
MyView.appearance().setStarViewColor(someColor)
Actualmente estoy usando esta solución en mi proyecto Swift y funciona, espero que también te sea útil.
Marque su propiedad de vista personalizada como dynamic
.
Por ejemplo:
class YourCustomView: UIView {
dynamic var subviewColor: UIColor? {
get { return self.yourSubview.backgroundColor }
set { self.yourSubview.backgroundColor = newValue }
}
...
}
Entonces:
YourCustomView.appearance().subviewColor = UIColor.greenColor()
No encontré la solución sino una solución alternativa. En lugar de anotar las propiedades, las hice como una variable de clase.
private struct StarFillColor { static var _color = UIColor.blackColor() }
internal class var starFillColor: UIColor {
get { return StarFillColor._color }
set { StarFillColor._color = newValue }
}
Y en el archivo donde configuro todas mis apariciones:
MyClass.starFillColor = UIColor.r(181, g: 60, b: 109)
Espero que ayude a alguien!