使用外观代理仅定位顶部导航栏的栏按钮

时间:2013-03-09 21:22:46

标签: ios objective-c uibarbuttonitem

我使用外观代理来设置我的应用程序样式,但是我对[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

所以,我的问题是:是否可以 - 使用外观代理 - 仅设置顶部导航栏的栏按钮的样式?

1 个答案:

答案 0 :(得分:4)

您可以将外观限制为某些容器类。来自appearance reference

appearanceWhenContainedIn:
  

返回给定包含中接收器的外观代理   层次结构。 (所需的)

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

参数 的 ContainerClass, 未列出的外观容器类列表。 回报价值 给定包含层次结构中接收器的外观代理。

讨论 的 此方法抛出var-args列表中不符合UIAppearanceContainer协议的Class对象的任何项的异常。

状况 适用于iOS 5.0及更高版本。


对于您的示例,那将是:

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