2014-10-02 9 views
41

Die Apple-Dokumentation heißt es:Aussehen Proxies/UI_APPEARANCE_SELECTOR in Swift?

im Aussehen Proxy-API teilnehmen zu können, mit UI_APPEARANCE_SELECTOR Ihr Aussehen Eigenschaft Selektoren in Ihrem Header-Tag.

In Objective-C ein Objekt mit UI_APPEARANCE_SELECTOR wie dieser mit Anmerkungen versehen kann:

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

Wie kann ich das gleiche in Swift zu tun?

Antwort

3

Ich habe die Lösung aber nicht gefunden. Anstatt die Eigenschaften zu kommentieren, habe ich sie als Klassenvariable erstellt.

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

Und in der Datei, wo ich Setup alle meine Auftritte:

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

Ich hoffe, dass es jemand helfen!

1

In Swift benötigen Sie (eigentlich können Sie nicht) Eigenschaften mit UI_APPEARANCE_SELECTOR zu kommentieren.

So stellen Sie sicher, dass Ihr Aussehen Eigenschaftenaccessor Methoden der Form sein:

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

Zum Beispiel:

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

Dann können Sie Ihr Aussehen Eigenschaft wie folgt festgelegt:

MyView.appearance().setStarViewColor(someColor) 

Ich verwende derzeit diese Lösung in meinem Swift-Projekt und es funktioniert, hoffe, es ist hilfreich für Sie oo.

+0

Hallo, können Sie Ihre Klasse schreiben Sie es in bitte verwenden! Ich kann meinen Setter anscheinend nicht richtig aufrufen, ich bekomme eine 'BAD_ACCESS', wenn ich versuche, sie aufzurufen. Ich frage mich, ob ich meine Klasse richtig deklariere, es ist eine Unterklasse von "UIButton" und ich bin konform mit "UIAppearanceContainer" wie es in den Dokumenten sagt! Prost! – Rich

+0

@Rich Checkout mein [gist] (https://gist.github.com/guojiubo/adff619fdba8f8ba698c), einschließlich der ganzen Klasse, hoffe, es hilft. – guojiubo

+0

Leider erlaubt mir das nicht, die Farbe für bestimmte Instanz zu ändern. Irgendeine Idee, wie das erreicht werden kann? Vielen Dank! – Reinhold

35

Markieren Sie Ihre benutzerdefinierte Ansicht als dynamic.

Zum Beispiel:

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

Dann:

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

Ich muss das ausprobieren. Ist es irgendwo dokumentiert? – Mazyod

+0

Das ist perfekt, funktioniert wie ein Charme. – Mazyod

+0

Soweit ich weiß, ist es nicht dokumentiert, aber ich habe es versucht und es hat funktioniert. Grundsätzlich sollten Swift-Eigenschaften, auf die dynamisch von Objective-C-Frameworks zugegriffen wird, als dynamisch markiert werden.UI_APPEARANCE_SELECTOR ist nur eine Compiler-Annotation für die Code-Vervollständigung und hat keine Auswirkungen auf die Laufzeit. Überprüfen Sie /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAppeara nce.h –