swift uikit uiappearance

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!