2013-03-09 87 views
3

我使用外觀代理來定義我的應用,但是我遇到了[UIBarButtonItem外觀]的問題;我只想設置頂部UINavigationbar的按鈕樣式,但是當我運行下面的代碼時,同樣的樣式也會應用到鍵盤的完成按鈕。使用外觀代理僅定位頂部導航欄的條形按鈕

NSDictionary *btnAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
           [UIColor blackColor], 
           UITextAttributeTextColor, 
           [UIColor clearColor], 
           UITextAttributeTextShadowColor, nil]; 

[[UIBarButtonItem appearance] setTitleTextAttributes: btnAttributes 
              forState: UIControlStateNormal]; 

The style gets applied to the keyboards done button

所以,我的問題是:是否有可能 - 使用外觀代理 - 樣式只有頂部導航欄的欄按鈕?

回答

4

您可以限制某些容器類的外觀。從appearance reference

appearanceWhenContainedIn: 

返回在給定的遏制 層次結構中的接收器的外觀代理。 (必需)

+ (id)appearanceWhenContainedIn:(Class <UIAppearanceContainer>)ContainerClass,... 

參數 ContainerClass, 外觀的容器類的零封端的列表。 返回值 給定包容層次結構中接收者的外觀代理。

討論 這種方法會因在var-的args列表不是一類對象,符合UIAppearanceContainer協議的任何項的異常。

可用性 適用於iOS 5.0或更高版本。


對於你的榜樣,這將是:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationController class], nil] 
        setTitleTextAttributes:btnAttributes 
            forState:UIControlStateNormal]; 
+0

正是我一直在尋找,直到感謝! – jonik 2013-03-09 21:58:21

+0

使用像'MPMoviePlayerController'這樣的類時要小心,因爲該野獸實際上使用了'UINavigationController'的子類,但不符合外觀。無論如何,很高興我可以幫忙。 – Till 2013-03-09 22:00:11