使用UIAppearance API自定义UIBarButtonSystemItem的色调颜色

时间:2013-02-21 16:51:41

标签: ios objective-c uikit uibarbuttonitem uiappearance

我知道我可以通过

自定义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

事实证明,系统图标的轮廓颜色实际上可以通过tintColor的{​​{1}}属性进行设置,但前提是其UIBarButtonItem属性的值为style }。 (即使这样,一些颜色是特殊的并且使轮廓保持白色。一种颜色是UIBarButtonItemStylePlain)但是,使用[UIColor blackColor]中的UIBarButtonItem UINavigationBar被强制为style。在这种情况下,UIBarButtonItemStyleBordered设置按钮的背景颜色并使轮廓保持白色。

当我在导航栏中使用tintColor时,我的问题仍然没有解决。

3 个答案:

答案 0 :(得分:7)

注意:以下内容仅适用于添加到工具栏的按钮,而不适用于导航栏。

使用tintColor的{​​{1}}属性。可以在特定实例上调用它,也可以在UIBarButtonItem上为所有按钮项调用它。

通过appearance小心设置所有按钮项目的色调。设置色调时,并非所有按钮项都正确。

更新

appearance

这会使按钮的图标变黑(背景将是工具栏的色调)。

答案 1 :(得分:6)

我通过在外部编辑器中更改条形按钮系统项目png文件的颜色来解决我的问题,包括该图像到项目并通过

加载它
[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIButtonBarTrashBlack"] style:UIBarButtonItemStyleBordered target:self action:@selector(myAction)];

我使用有用的UIKit-Artwork-Extractor找到了内部系统图片。

我使用免费软件GIMP编辑了艺术作品的颜色。

答案 2 :(得分:-1)

不使用黑色,请使用:

  

[UIColor colorWithRed:0绿色:0蓝色:0 alpha:1]; // [UIColor   blackColor]使它成为白色