0

私はカスタム背景と私自身の戻るボタンを持つUINavigationBarを持っています。私はこれを達成するために次のことをしました。UINavigationItem leftBarButtonが背景の背後に隠されています

//custom background 
UIImageView *background = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navigation-bar.png"]] autorelease]; 
[self.navigationController.navigationBar insertSubview:background atIndex:0]; 

//custom back button 
UIImage *buttonImage = [UIImage imageNamed:@"btn_back.png"]; 
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setImage:buttonImage forState:UIControlStateNormal]; 
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); 
[button addTarget:self action:@selector(backPressed:) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
self.navigationItem.leftBarButtonItem = customBarItem; 
[customBarItem release]; 

バックボタンは常に機能しますが、カスタム背景を適用しないと表示されません。誰かが両方を達成する方法を指摘してもらえますか?

ありがとうございます。 Ricky。

答えて

1

あなたは、私は次のことをやってしまったこの

@implementation UINavigationBar (UINavigationBarCategory) 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{ 
    if([self isMemberOfClass:[UINavigationBar class]]) 
    { 
     UIImage *image; 


     image=[UIImage imageNamed:@"nav_bar_img"]; 


     CGContextClip(ctx); 
     CGContextTranslateCTM(ctx, 0, image.size.height); 
     CGContextScaleCTM(ctx, 1.0, -1.0); 
     CGContextDrawImage(ctx, 
          CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage); 
    } 
    else 
    {   
     [super drawLayer:layer inContext:ctx];  
    } 
} 
@end 
+0

ありがとうございますsaadnib、しかし私は私のアプリ全体の背景を変更したい場合はどうなりますか? – Ricky

+0

アプリデリゲートを置くとアプリケーション全体で機能します – saadnib

+0

申し訳ありませんが、私は、ナビゲーションバーの背景をアプリ全体を通してさまざまな画像に変更したいと思っています。 – Ricky

0

を使用してナビゲーションバーの背景画像を設定することができます。

@implementation UINavigationBar (Category) 

- (void)drawRect:(CGRect)rect 
{ 
    MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [delegate.navImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 

@end 

私はバーの背景を変更するたびに、私は、デリゲートのnavImageプロパティを変更し、私のナビゲーションバーに-setNeedsDisplayを呼び出します。

ありがとうございました。

関連する問題