如何设置自定义导航栏按钮颜色

时间:2011-11-22 01:03:40

标签: objective-c cocoa-touch iphone-sdk-3.0

我正在尝试为我的UINavigationBar上的按钮设置自定义颜色,但只有在其中显示特定的UIViewController时(我知道这是可疑的UI设计,但它是特定的客户要求)。

我们当前的实现使用Swizzle覆盖所有drawRect个对象的UINavigationBar。这是必要的,因此我们的自定义导航栏颜色应用于标准iOS屏幕(例如通过标准API添加新联系人时)。

我想将某个特定UIViewController的导航栏的色调颜色更改为与其他UIViewController不同,但Swizzle始终优先。

我正在iOS 4.3模拟器中测试。我们支持iOS 3.x客户端及以上版本(iPhone,iPod和iPad),因此我不能只使用较新的iOS 5 API来自定义它。

我尝试过的其他事情没有成功:

  • 添加setStyle次调用(根据this workaround)以再次更新按钮。

  • 我尝试了UINavigationButton黑客,我发现here(我知道这是一个私有API,并且苹果拒绝该应用程序存在风险)。我尝试将该代码放在viewWillAppear中。

2 个答案:

答案 0 :(得分:1)

我认为this question的答案会回答你的问题。我的答案使用UISegmentedControl,不需要任何私有API调用。

答案 1 :(得分:1)

根据this Stackoverflow answer,我通过创建带有自定义背景图片的UIButton来实现此目的。

如果它对任何人有帮助,这是我的代码:

#import <QuartzCore/QuartzCore.h>

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage:[UIImage imageNamed:@"mybackground.png"] forState:UIControlStateNormal];
[button setTitle:NSLocalizedString(@"Login", @"Button (9 chars limit) - Login") forState:UIControlStateNormal];
button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:12.0f];
[button.layer setCornerRadius:5.0f];
[button.layer setMasksToBounds:YES];
[button.layer setBorderWidth:1.0f];
[button.layer setBorderColor: [[UIColor grayColor] CGColor]];
button.frame=CGRectMake(0.0, 100.0, 60.0, 30.0);
[button addTarget:self action:@selector(myLoginActionMethod:) forControlEvents:UIControlEventTouchUpInside];

self._loginButton= [[UIBarButtonItem alloc] initWithCustomView:button]; 

一般情况下,我认为最好在UIViewController中设置这样的色调(虽然在我的情况下,由于drawRect上的UINavigationBar混合调整,这不起作用我的代码):

self.navigationController.navigationBar.tintColor=[UIColor blueColor];