使用 UIAppearance API 自定义 UIBarButtonSystemItem 的色调颜色
Posted
技术标签:
【中文标题】使用 UIAppearance API 自定义 UIBarButtonSystemItem 的色调颜色【英文标题】:Customizing tint color of UIBarButtonSystemItem with UIAppearance API 【发布时间】:2013-02-21 16:51:41 【问题描述】:我知道我可以通过以下方式自定义UIBarButtonItem
文本
setTitleTextAttributes:forState:
还有一种方法可以自定义UITabBar
图标通过
setSelectedImageTintColor:
有没有办法自定义UIBarButtonSystemItem
的色调(例如垃圾桶图标颜色),只是为了获得一致的用户体验?我找不到任何东西。
如果这不可能,我将如何进行?我应该保存图标的颜色修改版本吗?我在哪里可以找到它?修改它的最简单方法是什么?
编辑
澄清一下,我要求的不是UIBarButtonItem
的背景颜色,而是图标轮廓的颜色。
编辑
设置UIBarButtonItem
的色调颜色会生成按钮集的背景颜色。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
[[UINavigationBar appearance] setTintColor:[UIColor greenColor]];
UIBarButtonItem* trashButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:nil action:nil];
trashButton.tintColor = [UIColor blackColor];
UIViewController* viewController = [[UIViewController alloc] init];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[viewController.navigationItem setRightBarButtonItem:trashButton];
self.window.rootViewController = navController;
return YES;
产生this。
编辑 2
事实证明,系统图标的轮廓颜色实际上可以通过UIBarButtonItem
的tintColor
属性设置,但前提是其style
属性的值为UIBarButtonItemStylePlain
。 (即便如此,有些颜色是特殊的,并且使轮廓保持白色。一种这样的颜色是[UIColor blackColor]
)但是,在UINavigationBar
中使用UIBarButtonItem
,style
被强制为UIBarButtonItemStyleBordered
。在这种情况下,tintColor
设置按钮的背景颜色并将轮廓保留为白色。
当我在导航栏中使用UIBarButtonItem
s 时,我的问题仍未解决。
【问题讨论】:
【参考方案1】:注意:以下仅适用于添加到工具栏的按钮,不适用于导航栏。
使用UIBarButtonItem
的tintColor
属性。要么在特定实例上调用它,要么在所有按钮项的 appearance
上调用它。
请注意通过appearance
设置所有按钮项的色调。设置色调时,并非所有按钮项看起来都正确。
更新:
UIBarButtonItem *btnAdd = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addAction)];
btnAdd.tintColor = [UIColor blackColor];
这将使按钮的图标变黑(背景将是工具栏的色调)。
【讨论】:
感谢您的及时答复。正如我所怀疑的,这会改变 barButton 的背景颜色。说,我的导航栏是绿色的,按钮背景也是绿色的,我想显示黑色文本,UIBarButtonSystemItem
s 在绿色背景上也是黑色的,我该如何实现?我唯一的问题是UIBarButtonSystemItem
的黑色,默认为白色,我无法修改。
我在我的应用程序中执行此操作。对于系统类型栏按钮项目之一,我设置了按钮的 tintColor。这只会更改图标的颜色。我对添加到工具栏的条形按钮项执行此操作。
刚试了又试了又试了。使用 ios 6.1 SDK。将色调设置为黑色我得到一个黑色背景上的白色垃圾桶。我需要一个绿色背景上的黑色罐子。
我刚刚验证了我发布的代码对于更改图标的颜色是正确的,而不是按钮的背景。确保注释掉所有其他 UIBarButtonItem appearance
代码,并在单个按钮上仅尝试 tintColor
。
好的,我明白了。我已经说过我的解决方案是针对工具栏的。您更新的代码显示您将栏按钮项放在导航栏中。我需要看看这是否会有所作为。【参考方案2】:
我通过在外部编辑器中更改条形按钮系统项 png 文件的颜色解决了我的问题,包括该图像到项目并通过加载它
[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIButtonBarTrashBlack"] style:UIBarButtonItemStyleBordered target:self action:@selector(myAction)];
我使用有用的UIKit-Artwork-Extractor 找到了内部系统映像。
我使用免费软件GIMP编辑了艺术品的颜色。
【讨论】:
非常感谢您提供这个有用的答案!这确实似乎是最简单的方法。 太糟糕了,你不能在 UINavigationBar 中设置 UIBarButtonItem 的宽度 :( 现在按钮看起来不像系统项。【参考方案3】:不要使用黑色,而是使用这个:
[UIColor colorWithRed:0 green:0 blue:0 alpha:1]; // [UI颜色 blackColor] 使其变为白色
【讨论】:
没有评论就失望了?很有用以上是关于使用 UIAppearance API 自定义 UIBarButtonSystemItem 的色调颜色的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIAppearance 代理自定义字体时,MFMailComposeViewController 不起作用