更改默认图标颜色是iOS工具栏

问题描述:

我需要工具栏中的自定义图标(黄色工具栏背景上的黑色图标)。 我尝试过UIBarButtonItem的initWithImage构造函数,但是这种情况下 是使用alpha值显示的图标,而且似乎没有办法通过 来更改基本的白色图标颜色。我结束了使用UIButton,但它会好得多, 只是改变默认的图标颜色,这有可能吗?的initWithImage的参数更改默认图标颜色是iOS工具栏

UIImage *buttonImage = [UIImage imageNamed:iconName]; 

UIBarButtonItem *bi = [[UIBarButtonItem alloc] initWithImage:buttonImage style:UIBarButtonItemStylePlain target:nil action:nil]; 

阅读说明:风格:目标:动作:

图像0​​ 该项目的形象。如果零图像不显示。

栏上显示的图像来源于此图像。如果此图像太大而无法放在条上,则会缩放以适合该条。通常,工具栏和导航栏图像的大小为20 x 20点。源图像中的alpha值用于创建图像 - 不透明值将被忽略。

除alpha外的所有内容都被忽略。工具栏是黑色和白色。
子类或使用其他UI框架,如three20,如果你真的需要那里的颜色。

您可以通过设置色调要使工具栏黄色:

toolbar.tintColor = [UIColor colorWithRed:0.83 green:0.43 blue:0.57 alpha:0.5]; 

如果你想定制的UIBarButtonItem使用自定义图像,颜色等......就像你在UIButton的获得,一种选择是创建一个类将UIButton封装为UIBarButtonItem中的自定义视图。这里是我的自定义类 - 希望它帮助:

@interface ENBarButtonImageItem : UIBarButtonItem 
{ 
    UIButton *_button; 
} 

@implementation ENBarButtonImageItem 

- (id)initWithFrame:(CGRect)frame 
       image:(UIImage*)image 
    backgroundImage:(UIImage*)bgImage 
{ 
    _button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [_button setFrame:frame]; 

    self = [super initWithCustomView:_button]; 
    if (self) 
    { 
     if (image) 
      [_button setImage:image forState:UIControlStateNormal]; 

     if (bgImage) 
      [_button setBackgroundImage:bgImage forState:UIControlStateNormal]; 

    } 
    return self;  
} 

- (id)initWithFrame:(CGRect)frame 
       image:(UIImage*)image 
    backgroundImage:(UIImage*)bgImage 
      target:(id)target 
      action:(SEL)selector 
{ 
    self = [self initWithFrame:frame image:image backgroundImage:bgImage]; 
    if (self) 
    { 
     [_button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside]; 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
    [_button release]; 
} 

- (void)addTarget:(id)target action:(SEL)selector forControlEvents:(UIControlEvents)controlEvents 
{ 
    [_button addTarget:target action:selector forControlEvents:controlEvents]; 
} 

- (void)setImage:(UIImage *)image forState:(UIControlState)state 
{ 
    [_button setImage:image forState:state]; 
} 

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state 
{ 
    [_button setImage:image forState:state]; 
} 
+0

是的,这基本上是我现在有,但问题是UIButton的这种行为是不同的,在操作方法我只有UIButton的指针,我不能使用酥料饼presentPopoverFromBarButtonItem和处理popover现在有点棘手... – Janci