2014-10-02 32 views
41

The Jabłko stany dokumentacja:Wygląd proxy/UI_APPEARANCE_SELECTOR w Swift?

do wzięcia udziału w wyglądzie interfejsu API proxy, Tag swój wygląd selektorów własności w nagłówku z UI_APPEARANCE_SELECTOR.

w Objective-C można adnotacje właściwości z UI_APPEARANCE_SELECTOR jak ten:

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

Jak mogę zrobić to samo w Swift?

Odpowiedz

3

Nie znalazłem rozwiązania, ale obejść. Zamiast adnotować właściwości, zrobiłem je jako zmienną klasy.

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

A w pliku, w którym mogę skonfigurować wszystkie moje występy:

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

Mam nadzieję, że to pomoże kogoś!

1

W Swift nie potrzebujesz (właściwie nie możesz) adnotowania właściwości za pomocą UI_APPEARANCE_SELECTOR.

Wystarczy upewnić się, że metody dostępowe własności wygląd mieć postać:

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

Na przykład:

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

Następnie można ustawić swoją nieruchomość wygląd tak:

MyView.appearance().setStarViewColor(someColor) 

Obecnie używam tego rozwiązania w moim projekcie Swift i działa, mam nadzieję, że ci to pomoże z oo

+0

Cześć, można zamieścić swoje klasy używasz go proszę! Nie mogę poprawnie nazwać mojego setera, dostaję 'BAD_ACCESS' przy próbie wywołania tego. Zastanawiam się, czy poprawnie deklaruję swoją klasę, jej podkategorię "UIButton" i dostosowuję się do "UIAppearanceContainer", jak to się mówi w dokumentach! Twoje zdrowie! – Rich

+0

@Rich Checkout my [gist] (https://gist.github.com/guojiubo/adff619fdba8f8ba698c), w tym cała klasa, mam nadzieję, że pomoże. – guojiubo

+0

Niestety to nie pozwala mi zmienić koloru dla konkretnej instancji. Masz pomysł, jak to osiągnąć? Dzięki! – Reinhold

35

Oznacz swoją niestandardową właściwość widoku jako dynamic.

Na przykład:

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

Następnie:

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

Muszę to wypróbować. Czy gdzieś to dokumentuje? – Mazyod

+0

To jest idealne, działa jak urok. – Mazyod

+0

O ile mi wiadomo, nie jest to udokumentowane, ale próbowałem i zadziałało. Zasadniczo właściwości Swift dynamicznie dostępne z frameworka Objective-C powinny być oznaczone jako dynamiczne.UI_APPEARANCE_SELECTOR to tylko adnotacja kompilatora do uzupełniania kodu i nie ma wpływu na środowisko wykonawcze. Sprawdź /Aplikacje/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer /SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAppeara nce.h –