2012-12-11 49 views
3

我使用UIAppearance定製的UIBarButtonItem所有與主類:使用UIAppearance定製的UIBarButtonItem子類,但不是

[[UIBarButtonItem appearance] setTintColor:[UIColor purpleColor]]; 

除了顏色選擇不當,它的偉大工程。

現在,我想要一些具有特定風格的按鈕。所以我創建了一個新班級,我們稱之爲YellowDoneBarButtonItem
我想自定義過,所以我補充一下:

[[YellowDoneBarButtonItem appearance] setTintColor:[UIColor yellowColor]]; 

不幸的是,... appearance] setTintColor:勝,和所有的按鈕,子類,或者不是最後一次通話,採用最後指定的顏色。

我不能使用appearanceWhenContainedIn:,因爲有時候,我可能在同一個導航欄中有兩種不同的按鈕樣式。

有沒有辦法使用UIAppearance更有選擇性嗎?

的醫生說:

在任何給定的視圖層次結構,最外層的外觀代理獲勝。特殊性(鏈條的深度)是決勝因素。換句話說,appearanceWhenContainedIn中的包含語句被視爲部分排序。給定一個具體的順序(實際的子視圖層次結構),當從窗口向下讀取實際層次結構時,UIKit選擇第一個唯一匹配的部分順序。

任何把這個事實屈從於這裏需要什麼的技巧?

+1

它似乎是實例化的實際按鈕是UINavigationButton,它是UIButton的(私有)子類。這可能解釋了爲什麼UIBarButtonItem外觀子類是一個全面的。 –

+0

有趣的。你應該將它作爲答案發布(如果你有這些答案,請提供更多詳細信息),以便我可以接受你的答案。 – Guillaume

+0

那裏 - 爲我的回答添加了一個小的附加細節:) –

回答

2

看來,實例化的實際按鈕是UINavigationButton,它是UIButton的(私有)子類。這可以解釋爲什麼UIBarButtonItem外觀子類是一個全面的。

對我而言,我一直使用UIButton作爲自定義視圖來獲得所需的外觀。這些可以很容易地用UIAppearance進行覆蓋。

相關問題