我使用外观代理来设置我的应用程序样式,但是我对[UIBarButtonItem外观]有疑问;我只想设置顶部UINavigationbar的按钮,但是当我运行下面的代码时,相同的样式也会应用到键盘的完成按钮。
NSDictionary *btnAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor],
UITextAttributeTextColor,
[UIColor clearColor],
UITextAttributeTextShadowColor, nil];
[[UIBarButtonItem appearance] setTitleTextAttributes: btnAttributes
forState: UIControlStateNormal];
所以,我的问题是:是否可以 - 使用外观代理 - 仅设置顶部导航栏的栏按钮的样式?
答案 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];