如何着色UIBarButtonItem背景颜色?

时间:2010-07-18 05:45:43

标签: iphone objective-c cocoa-touch interface-builder uibarbuttonitem

我有一个包含2个按钮的UIToolbar。工具栏有一个色调:

toolbar.tintColor = [UIColor colorWithRed:(102.0/255.0) green:(20.0/255.0) blue:(11.0/255.0) alpha:1];

如何让按钮具有类似的色调?

7 个答案:

答案 0 :(得分:15)

我发现此解决方案优于此处列出的解决方案:Tint UIButton and UIBarButtonItem。与接受的答案不同,它允许您独立于UINavigationBar更改UIBarButtonItem的颜色。

如果链接将来发生变化,它的要点是你用一个段创建一个有色的UISegmentedControl(带有UISegmentedControlStyleBar),然后使用它作为自定义视图创建一个UIBarButtonItem。

在iOS 5中,UIBarButtonItem具有tintColor属性。

答案 1 :(得分:8)

最好的办法是设置tintColor在向其添加按钮之后,就像在iOS 4.0中一样,在设置tintColor后,它不再更新添加到栏中的按钮。

答案 2 :(得分:2)

在这篇文章中找到答案:

UIToolbar tint on iOS 4

答案 3 :(得分:2)

请参阅“更改UINavigationBarButtons的颜色”

编辑:我删除了该链接,因为域已关闭...

来自Google缓存的文字:


好的,这是另一个快速提示。 “如何更改工具栏上按钮的颜色。”当然,这可以应用于任何工具栏,但我将在UINavigationBar上演示该过程。

上图仅显示几种颜色。事实上,您可以使按钮成为您想要的任何颜色。太棒了!代码执行起来非常简单。我们要做的第一件事是打开头文件,无论哪个对象将导航条按钮变成不同的颜色,并声明前向类UINavigationButton。你可以通过迭代UINavigationBar的子视图,读取它的子视图类名,或者如果你有一个越狱设备,通过类倾销UIKit来获得这个类。

在接口声明之前放置以下行:

@class UINavigationButton;

现在,在标题中声明一个新方法,我们将用它来实际更改按钮的颜色。

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor

或类似上面的代码行。

现在,打开对象的实现文件并实现上述方法。在文件中的任何位置添加以下方法:

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor {
     for (UIView *view in self.navigationController.navigationBar.subviews) {
             NSLog(@"%@", [[view class] description]);
             if ([[[view class] description] isEqualToString:@"UINavigationButton"]) {
                     [(UINavigationButton *)view setTintColor:newColor];
             }
     }
   }

正如您在上面所看到的,这实际上比它最初看起来要容易得多。我们首先要做的是设置一个for循环来使用NSFastEnumeration迭代UINavigationBar的子视图。然后我们输出子视图的类名,以供将来参考。如果类名是UINavigationButton,那么我们就得到了我们的观点。我们所做的就是设置tintColor属性,如果是UINavigationButton。

就是这样,我们完成了!

或者,如果您想要更广泛的范围,我建议创建一个新的UINavigationBar类别并在其中放置按钮颜色更改方法。这是你的方法可以由任何使用UINavigationBar的类执行,而不必反复重新创建相同的方法。

请记住,后退按钮和导航按钮不是一回事。您必须单独为后退按钮着色。

和往常一样,这里有一个演示此代码的示例应用的链接:NavButtonColor.zip

答案 4 :(得分:1)

UIBarButtonItems固有地回复setTintColor,但它不是公共API。

我有一个运行此块的自定义UINavigationBar子类:

for (UIView *subview in self.subviews) {
    if ([subview respondsToSelector:@selector(setTintColor:)]) {
        [subview performSelector:@selector(setTintColor:) withObject:[UIColor redColor]];
    }
}

显然用您选择的颜色替换[UIColor redColor]

答案 5 :(得分:0)

适用于UIBarButtonItem的iOS 5.0及更高版本:

 - (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics

这似乎是目前唯一的解决方案(IOS 9.0)。 tintColor现在用于图像颜色。

答案 6 :(得分:0)

Swift3

@if (Auth::check() && Auth::user()->status)
    // button
@endif