在推送表视图控制器时从导航栏中删除背景图像

时间:2011-03-31 18:17:27

标签: iphone uinavigationbar

我有一个基于导航的应用程序,我将TableViewControllers推入堆栈。我想在第一个TableViewControllers中添加背景图像。不是颜色,而是图像。

我添加了一个用于设置和删除背景图像的类别。

@implementation UINavigationBar (UINavigationBarCategory) 

-(void)setBackgroundImage:(UIImage*)image withTag:(NSInteger)bgTag {
    if(image == NULL){ //might be called with NULL argument
        return;
    }
    UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:image];
    aTabBarBackground.frame = CGRectMake(self.frame.size.width/2-51,0,102,44);
    aTabBarBackground.tag = bgTag;
    [self addSubview:aTabBarBackground];
    [self sendSubviewToBack:aTabBarBackground];
    [aTabBarBackground release];
}

- (void) clearBackgroundImage {
    NSArray *subviews = [self subviews];
    for (int i = [subviews count] - 1; i >= 0; i--) {
        if ([[subviews objectAtIndex:i] isMemberOfClass:[UIImageView class]]) {
            [[subviews objectAtIndex:i] removeFromSuperview];
        }
    }    
}

我使用以下代码设置图像:

[[navigationController navigationBar] setBackgroundImage:[UIImage imageNamed:@"AppTop-Banner.png"]];

正在正确添加背景图像,但是为了后续推入视图Tableview控件,我无法通过调用以下内容来删除图像:

@implementation SecondTableViewController

-(id) init {
    self = [super init];
    if (self != nil) {
        self.title = @"Categories";
    }
}

- (void)viewDidAppear:(BOOL)animated { 
        [super viewDidAppear:animated];  
        [self.navigationController.navigationBar clearBackgroundImage];
}  

在这种情况下,“clearBackgroundImage”永远不会被调用,背景图像仍然存在,标题与图像重叠。我不确定我是否可以通过这种方式引用navigationBar。也许self.navigationController.navigationBar不是调用相关导航栏的正确方法。有人可以请点亮。

0 个答案:

没有答案