2011-04-29 61 views
1

我有我的导航栏中的2个UIBarButtonItems的导航控制器。我只想改变右侧的颜色。我发现在静态的方式来做到这一点:UIBarButtonItem tintColor与UINavigationController

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

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

我曾尝试在互联网上发现的其他工艺,但都失败了,当我使用导航控制器和回来到根控制器...

任何想法? 谢谢!

编辑1:

我想在我的UINavigationBar的一个边框的样式按钮,用红色或绿色的背景颜色。

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

+0

大多数时候,我们不能拿出一个很好的解决方案,所以我不能说我们解决了我的问题。这可能是我的低利率以及未解决问题的原因。否则,我相信某人,如果他解决了,甚至部分帮助我解决我的问题... – Dachmt 2011-04-29 23:29:27

+0

@Erik B你让我更容易然后,你没有对我的问题有所帮助。所以我不会给你任何信用的。但是我会记住你对我的旧帖子和下一篇帖子所说的话,最好是学习一些东西,而不是一无所获。祝你有个好的一天。 – Dachmt 2011-05-03 01:07:54

回答

1

挖掘navigationcontroller.navigation栏的子视图不会与Apple一起飞...
更改UIBarButtonItem颜色的正确方法是使用带有buttonitem的customView。这里是解释链接...

UIBarButtonItem with color?

+0

我已经尝试了解决方案,我可以有一个按钮,但不像我想要的那样有边界。我想避免创建一个图像作为背景。如果它是我的导航栏中唯一能够使用自定义颜色按钮获得边框样式的解决方案,那么我想我不会有太多选择... – Dachmt 2011-04-29 23:34:41

+0

在按钮中使用图像,或者也可以使用Quartz 。让我知道你是否想要一些代码。 – 2011-04-30 00:46:17

0

您只需创建只有一个段分段控制。根据你的喜好设置色调。您可能还想将其模式设置为瞬时模式,以使其光学行为像按钮一样。通过使用initWithCustomView:初始化程序将分段控件添加到条按钮项。这就是您通常创建自定义有色按钮的方式。

例子:

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];