2014-10-02 10 views
41

La documentazione Apple:Proxy di aspetto/UI_APPEARANCE_SELECTOR in Swift?

a partecipare alla comparsa di proxy API, taggare i tuoi aspetto selettori di proprietà nella vostra intestazione con UI_APPEARANCE_SELECTOR.

in Objective-C si può annotare proprietà con UI_APPEARANCE_SELECTOR come questo:

@property (nonatomic, strong) UIColor *foregroundColor UI_APPEARANCE_SELECTOR; 

Come posso fare lo stesso in Swift?

risposta

3

Non ho trovato la soluzione ma una soluzione alternativa. Invece di annotare le proprietà, le ho trasformate in una variabile di classe.

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

E nel file di configurazione in cui ho tutte le mie apparizioni:

MyClass.starFillColor = UIColor.r(181, g: 60, b: 109) 

spero che aiutare qualcuno!

1

In Swift, non è necessario (in realtà non è possibile) annotare le proprietà con UI_APPEARANCE_SELECTOR.

Basta assicurarsi che il metodi di accesso di proprietà comparsa essere di forma:

func propertyForAxis1(axis1: IntegerType, axis2: IntegerType, axisN: IntegerType) -> PropertyType 
func setProperty(property: PropertyType, forAxis1 axis1: IntegerType, axis2: IntegerType) 

Ad esempio:

func setStarViewColor(color: UIColor) { 
    self.backgroundColor = color 
} 

quindi è possibile impostare la vostra proprietà aspetto simile a questo:

MyView.appearance().setStarViewColor(someColor) 

Attualmente utilizzo questa soluzione nel mio progetto Swift e funziona, spero sia utile per te oo.

+0

Ciao, puoi pubblicare il tuo classe che si è in uso per favore! Non riesco a chiamare correttamente il mio setter, ottengo un 'BAD_ACCESS' quando provo a chiamarlo. Mi chiedo se sto dichiarando la mia classe correttamente, è una sottoclasse di 'UIButton' e mi sto conformando a' UIAppearanceContainer' come dice la documentazione! Saluti! – Rich

+0

@Rich Controlla il mio [gist] (https://gist.github.com/guojiubo/adff619fdba8f8ba698c), compresa l'intera classe, spero che aiuti. – guojiubo

+0

Purtroppo questo non mi permette di cambiare il colore per un'istanza specifica. Qualche idea su come questo possa essere ottenuto? Grazie! – Reinhold

35

Contrassegnare la proprietà della vista personalizzata come dynamic.

Ad esempio:

class YourCustomView: UIView { 
    dynamic var subviewColor: UIColor? { 
     get { return self.yourSubview.backgroundColor } 
     set { self.yourSubview.backgroundColor = newValue } 
    } 
    ... 
} 

Poi:

YourCustomView.appearance().subviewColor = UIColor.greenColor() 
+0

Ho bisogno di provarlo. È documentato da qualche parte? – Mazyod

+0

Questo è perfetto, funziona come un fascino. – Mazyod

+0

Per quanto ne so, non è documentato, ma ho provato e ha funzionato. Fondamentalmente le proprietà Swift accessibili dinamicamente dai framework Objective-C dovrebbero essere contrassegnate come dinamiche.UI_APPEARANCE_SELECTOR è solo un'annotazione del compilatore per il completamento del codice e non ha alcun effetto sul runtime. Controllare /Applicazioni/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer /SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAppeara nce.h –