2013-08-07 27 views
0

我有一個自定義按鈕,這僅僅是一個標準的UIButton,但有CAGradientLayer中添加麻煩UIAppearance和UIButton的子類

在我的自定義按鈕,我已經定義了兩個屬性:

@property (nonatomic, strong) UIColor* topColor UI_APPEARANCE_SELECTOR; 
@property (nonatomic, strong) UIColor* bottomColor UI_APPEARANCE_SELECTOR; 

如果這兩個值被設置,我的按鈕繪製一個很好的線性漸變。很棒。

我也喜歡儘可能多的使用InterfaceBuilder。因此,在這些按鈕中的某些按鈕上,在IB的「身份檢查器」中,我爲這些屬性添加了「用戶定義的運行時屬性」。再次,工作很好。

接下來,我想我會嘗試使用UIAppearance代理。我的大多數自定義漸變按鈕都具有相同的顏色。但有一些是不同的。所以,我想我會做的是使用外觀代理的東西來設置這個類的默認顏色,然後對於不同的按鈕,我可以在IntefaceBuilder中設置它們的值。這失敗了。

顯然,發生的事情是它首先從故事板文件中讀取運行時屬性,但之後這些值將被外觀代理覆蓋。我不希望這樣做,但它確實如此。

有關如何完成此任務的任何提示?或者我應該放棄運行時屬性的東西?

+0

請顯示一些代碼! –

+0

iT - 這裏真的沒有代碼顯示。在我的應用程序中:didFinishLaunchingWithOptions:launchOptions例程,我打電話給我的外觀代理的「setTopColor」和「setBottomColor」例程,以建立漸變中使用的默認頂部/底部顏色。我遇到的問題是,它正在從故事板中讀取屬性,設置它們,然後調用外觀代理調用,從故事板中覆蓋我的值。 –

回答

0

好吧,我想過這個,我猜這是外觀代理應該做的。所以,我的解決方案是有兩個類「MySpecialButton」和「MyAppearanceButton」。

MyAppearanceButton將是MySpecialButton的一個子類。

「MyAppearanceButton」的外觀將由外觀代理調用控制。如果我想要一個不受控制的按鈕,我將創建一個「MySpecialButton」並設置用戶定義的運行時屬性中的屬性。這應該做到這一點。

+0

它以這種方式工作的原因是因爲在將視圖添加到視圖層次結構時應用了外觀屬性,並且在將視圖添加到視圖層次結構之前應用了筆尖定義的屬性。我不清楚自己的是,我認爲UIA的外觀追蹤何時財產價值被明確設定,並且不會嘗試應用財產(如果有的話)。需要更多的研究。 – TomSwift