使用UINavigationController的UIBarButtonItem tintColor

时间:2011-04-29 22:13:37

标签: iphone uinavigationcontroller uibarbuttonitem tintcolor

我的导航栏中有一个带有2个UIBarButtonItems的导航控制器。我想仅为右侧的颜色更改色调颜色。我在静态方面找到了一种方法:

[[self.navigationController.navigationBar.subviews objectAtIndex:2] setTintColor:[UIColor redColor]];

问题是当我将控制器推入导航控制器以显示另一个视图时,当我回到根视图,我的右侧导航栏按钮应该具有自定义颜色时,按钮的颜色又回到它的默认值。当我再次点击它时,应用程序崩溃了。它说它不能改变色调颜色,就像导航栏中此元素的索引发生了变化一样。

我尝试过在互联网上找到的其他技术,但是当我使用导航控制器并返回根控制器时它们都失败了......

有什么想法吗? 谢谢!

修改1:

我想在我的UINavigationBar中使用带边框的样式按钮,背景为红色或绿色。

关于我找到的其他方法,它几乎是导航栏中视图的foreach循环,如果视图的类是按钮项,则更改tintColor。它不会崩溃,但它适用于我的导航栏的所有UIBarButtonItem(我只想要一个特定的按钮,正确的按钮,而不是所有按钮)。例如,this tutorial一半正在工作,我的应用程序在返回根视图控制器时崩溃。

2 个答案:

答案 0 :(得分:1)

深入了解navigationcontroller.navigation栏的子视图,不会与Apple一起飞行,...
更改UIBarButtonItem颜色的正确方法是使用带有buttonitem的customView。这是一个解释......

的链接

UIBarButtonItem with color?

答案 1 :(得分:0)

您只需创建一个只包含一个细分的分段控件。根据需要设置其色调颜色。您可能还希望将其模式设置为瞬间,以便它在光学上像按钮一样。使用initWithCustomView:初始化程序将分段控件添加到bar按钮项。这就是你通常创建自定义着色按钮的方式。

示例:

UISegmentedControl *cartControl = [[UISegmentedControl alloc] initWithFrame:CGRectMake(10,7,60,30)];
[cartControl setTintColor:[UIColor colorWithRed:0.35 green:0.47 blue:0.65 alpha:1]];
[cartControl addTarget:self action:@selector(cart:) forControlEvents:UIControlEventValueChanged];
[cartControl setSegmentedControlStyle:UISegmentedControlStyleBar]; 
[cartControl insertSegmentWithImage:[UIImage imageNamed:@"shopping_cart_white_small.png"] atIndex:0 animated:NO]; 
[cartControl setMomentary:YES];  

UIBarButtonItem *cartButton = [[UIBarButtonItem alloc] initWithCustomView:cartControl];
[cartControl release];
[[self navigationItem] setRightBarButtonItem:cartButton];
[cartButton release];