设置导航栏背景图像后,自定义后退按钮消失

时间:2011-07-27 09:23:27

标签: iphone image invisible navigationbar

我正在使用以下类别代码进行更改 导航栏的背景图片

#import <Foundation/Foundation.h>

@interface UINavigationBar (CustomImage)
- (void) setBackgroundImage:(UIImage*)image;
- (void) clearBackgroundImage;
@end


#import "UINavigationBar+CustomImage.h"

@implementation UINavigationBar (CustomImage)
- (void) setBackgroundImage:(UIImage*)image {
    if (image == NULL) return;
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    [self insertSubview:imageView atIndex:0];
    [imageView release];
}

- (void) clearBackgroundImage {    
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSArray *mySubviews = [self subviews];

    for (int i = [mySubviews count] - 1; i >= 0; i--)
    {
        if ([[mySubviews objectAtIndex:i] isMemberOfClass:[UIImageView class]])
        {
            [[mySubviews objectAtIndex:i] removeFromSuperview];
            return;
        }
    }

    [pool release];
}
@end

我正在使用以下代码生成自定义后退按钮 在我看来

UIButton *btnBack = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
[btnBack addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
[btnBack setImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal];
UIBarButtonItem *barBtnBack = [[UIBarButtonItem alloc] initWithCustomView:btnBack];
self.navigationItem.leftBarButtonItem = barBtnBack;

[btnBack release];
[barBtnBack release];

但大部分时间的按钮隐藏在bg图像下 有时它会随机出现。 为什么会这样?我不确定图像在索引0处插入的问题是什么 据我所知,它应该一直落后。 请帮忙。

3 个答案:

答案 0 :(得分:0)

添加图片后,您应尝试创建按钮。

答案 1 :(得分:0)

尝试使用以下代码更改正在加载导航栏的类中导航栏的背景。

@interface UINavigationBar (MyCustomNavBar)
@end
@implementation UINavigationBar (MyCustomNavBar)
- (void) drawRect:(CGRect)rect 
{
    UIImage *barImage = [UIImage imageNamed:@"image.png" ];
    [barImage drawInRect:rect];
}
@end

答案 2 :(得分:0)

使用方法Praveen S建议您可以为下一个背景图像名称设置一个全局变量并在viewDidLoad方法中设置它,然后在draw rect方法中使用存储在变量中的imageName而不是在draw rect中对其进行硬编码