如何更改UINavigationBar按钮项目上的文本颜色

时间:2009-02-02 22:15:37

标签: iphone cocoa-touch

我有一个UINavigationController,我使用Interface Builder中导航栏的Tint属性将其更改为白色。但按钮和标题中的文本仍然是默认颜色,白色,因此在白色背景下丢失。任何人都知道如何解决这个问题?

8 个答案:

答案 0 :(得分:31)

从iOS 5开始,使用UIBarButtonItem外观代理更容易:

 NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: 
                        [UIColor blackColor], 
                        UITextAttributeTextColor, 
                        [UIColor clearColor], 
                        UITextAttributeTextShadowColor, nil];

[[UIBarButtonItem appearance] setTitleTextAttributes: attributes
                                            forState: UIControlStateNormal];

在应用程序中设置:didFinishLaunchingWithOptions:

答案 1 :(得分:11)

for (id subView in theNavigationBar.subviews) {
    if ([subView isKindOfClass:[UIButton class]]) {
        [(UIButton *)subView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [(UIButton *)subView setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal];
    }

}

答案 2 :(得分:8)

这是一种方式:

[[theNavigationBar.subviews objectAtIndex:1] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[[theNavigationBar.subviews objectAtIndex:2] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

然而,巨大的,警告。这很可能会破坏未来的操作系统版本,不推荐使用。

至少你应该进行大量的测试,并确保你对导航栏的子视图布局的假设是正确的。

答案 3 :(得分:2)

或者您使用自己的按钮栏项子类与您指定的setter,lus不是iPhone OS 3假设为每个按钮公开文本颜色

答案 4 :(得分:2)

我做醉酒的建议。我在一些状态下使用后退按钮制作一系列图像,在几个状态下使用常规按钮,并将它们放在自定义UIButton子类中,设置适当的样式。

作为一种解决方案,它不能很好地扩展,但我的需求很简单。如果内置控件中的子视图顺序发生变化,它具有不破坏的优点,这是该方法的明显缺点。需要多张图片的缺点。另一个棘手的问题是处理方向更改,因为按钮应该改变大小。

在相关说明中,如果您确实更改了导航栏的色调颜色,则使用特殊的“更多”视图控制器无法很好地自定义选项卡栏的顺序。似乎没有任何“可接受的”方式来更改该视图中工具栏的颜色。

答案 5 :(得分:1)

你不能迭代UINavigationBar视图的内容来找到awakeFromNib中的按钮吗?

答案 6 :(得分:0)

这里使用干净的方式(依赖公共API)来执行此操作恕我直言:您应该使用titleView的{​​{1}}属性将其应用于您自己的navigationItem,您将在其中自定义UILabel

textColor

答案 7 :(得分:-1)

您可以通过在导航栏中添加标签来更改标题外观,如下所示。

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 35)];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
label.textColor =[UIColor whiteColor];
label.text=self.title;
self.navigationItem.titleView = viewLabel;
[label release];