2014-10-02 37 views
41

蘋果文檔狀態:Swift中的外觀代理/ UI_APPEARANCE_SELECTOR?

參加的外觀代理API,與UI_APPEARANCE_SELECTOR你的頭標記你的外表 屬性選擇。

在Objective-C可以與UI_APPEARANCE_SELECTOR這樣的註釋屬性:

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

我怎麼可以這樣做的雨燕?

回答

3

我沒有找到解決方案,而是一種解決方法。 而不是註釋我作爲一個類變量的屬性。

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

和文件在我安裝我所有的出場:

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

我希望這會幫助別人!

1

在Swift中,您不需要(實際上不能)用UI_APPEARANCE_SELECTOR註釋屬性。

只要確保你的外觀屬性訪問方法是這樣的形式:

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

例如:

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

然後你可以設置你的外觀屬性是這樣的:

MyView.appearance().setStarViewColor(someColor) 

我目前在我的Swift項目中使用這個解決方案,它的工作原理,希望對你有所幫助OO。

+0

嗨,你在請通過它,你可以發表你的課!我似乎無法正確地調用我的setter,當試圖調用它時,我得到一個'BAD_ACCESS'。我想知道如果我正確地聲明瞭我的類,它的一個'UIButton'子類,並且符合'UIAppearanceContainer'就像它在文檔中所說的!乾杯! – Rich 2014-12-02 22:14:04

+0

@仔細檢查我的[gist](https://gist.github.com/guojiubo/adff619fdba8f8ba698c),包括整個班級,希望它有所幫助。 – guojiubo 2014-12-04 02:27:23

+0

不幸的是,這不允許我改變特定實例的顏色。任何想法如何實現?謝謝! – Reinhold 2015-10-13 14:25:03

35

將您的自定義視圖屬性標記爲dynamic

例如:

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

然後:

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

我需要嘗試一下。它是否記錄在某處? – Mazyod 2015-02-26 16:08:37

+0

這是完美的,就像一個魅力。 – Mazyod 2015-02-26 16:33:22

+0

據我所知,這是沒有記錄,但我試過,它的工作。基本上,從Objective-C框架動態訪問的Swift屬性應該被標記爲動態的。UI_APPEARANCE_SELECTOR只是代碼完成的編譯器註釋,它對運行時沒有影響。檢查/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIAppeara nce.h – 2015-02-27 12:41:42