2012-09-25 45 views
18

我在我想在iOS 6應用中定製的某些UI元素上使用appearanceWhenContainedIn方法。我發現的問題是,沒有我的客戶化的應用,如果我嘗試提供一個以上的容器類,像這樣:包含多個類時的iOS 6外觀

// Works neither for toolbar nor navbar items 
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil] 

// Works fine (but only for navbar items, obviously) 
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] 

官方的文檔說,這種方法的參數可以是零終止列表的多個類,但在我的情況下,它從來不會按照它應該的方式工作。我在這裏錯過了什麼嗎?

回答

43

從文檔:

appearanceWhenContainedIn:

...

接收端的外觀代理在給定的遏制 層次

這實際上意味着,零封端的列表定義不是容器類的UIBarButtonItem的列表,但容器層次結構從上至下,所以

[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil] 

回報的UIBarButtonItem外觀代理即內部UINavigationBar的,並且UINavigationBar依次位於UIToolbar內部。

[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class],[ViewController class], nil] setTintColor:[UIColor redColor]]; 

設置紅色着色顏色爲處於任何UIToolBar其在的ViewController類UIBarButtonItems。

因此,要分別爲UINavigationBar和UIToolBar設置外觀,您需要兩次單獨調用+appearanceWhenContainedIn:方法