自定义UINavigationBar按钮不显示

时间:2010-12-23 00:35:14

标签: iphone uibutton uinavigationbar

(编辑:在底部添加更多信息)

首先,我查看了类似的帖子并尝试了他们的答案,但没有运气:(我有一个自定义导航栏(只是一个自定义的背景图片),我正在尝试添加自定义后退按钮。

// custom back button.
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *backImg = [UIImage imageNamed:@"btn_back.png"];
backBtn.titleLabel.text = @"";
[backBtn setBackgroundImage:backImg forState:UIControlStateNormal];
[backBtn addTarget:self action:@selector(backPressed) forControlEvents:UIControlEventTouchUpInside];
backBtn.frame = CGRectMake(0, 0, 54, 33);

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
self.navigationItem.leftBarButtonItem.title = @"";

以上代码用于添加按钮,但不会显示在导航栏上。我仍然可以点击其意图出现的区域,它确实将我带回到上一个视图?!删除上面的代码会显示标准后退按钮。

有什么想法吗?提前谢谢!

(编辑)

嗨,大家好,

我尝试了你的所有建议,但仍然没有运气:(我可能应该早些时候提到我使用以下代码自定义导航栏图像。这可能会影响我自定义后退按钮图像的显示。

此代码根据我设置的参数显示自定义图像。再次感谢您的进一步帮助!

// custom navigation bar image
@implementation UINavigationController (CustomImage)

// set the background image for the nav bar.
- (void) setCustomNavBar:(NSInteger)screen {

UIImage *navBarImg;
switch (screen) {
    case kCreateHuntScreenIdentifier:
        navBarImg = [UIImage imageNamed:@"title_create-hunt.png"];
        break;

    case kCreateLocationsScreenIdentifier:
        navBarImg = [UIImage imageNamed:@"title_create-location.png"];
        break;

    case kListNewLocationsScreenIdentifier:
        navBarImg = [UIImage imageNamed:@"title_choose-location.png"];
        break;

    default:
        break;
}

UIImageView *imgView = [[UIImageView alloc] initWithImage:navBarImg];
[[[self.navigationBar subviews] objectAtIndex:0] removeFromSuperview];
[self.navigationBar addSubview:imgView];
[imgView release];
}

@end

3 个答案:

答案 0 :(得分:2)

再次感谢您的所有建议!我终于找到了解决方案:D

当我推动或弹出堆栈时,我很快就需要能够将导航栏的背景图像从视图更改为视图。

使用最流行的方法,例如覆盖UINavigationBar的drawRect只能部分工作,它可以在根视图上工作,但是无论我是否将其发送到其他屏幕,都会将图像推送到导航栏堆栈的前面等等。

我在这里找到了解决方案:http://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/

读一读,效果很好:)

答案 1 :(得分:1)

UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
[btn setBackgroundImage:[UIImage imageNamed:@"imgname.png"] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(method_name:) forControlEvents:UIControlEventTouchUpInside];
btn.frame=CGRectMake(3, 2, 53, 30);
UIBarButtonItem *btnBack=[[UIBarButtonItem alloc] initWithCustomView:btn];
self.navigationItem.leftBarButtonItem=btnBack;
[btnBack release];
[btn release];

答案 2 :(得分:0)

尝试,

self.navigationItem.hidesBackButton = YES;

在为.leftBarButtonItem编写代码之前。希望它有帮助