2010-08-14 16 views
3

J'ai cherché un moyen de changer l'image de fond de mon NavigationBar et de contrôler l'apparence de mon NavigationBar lorsque l'utilisateur navigue dans l'application.Comment puis-je modifier l'image d'arrière-plan de mon NavigationBar par page?

Je comprends que l'approche acceptée pour changer l'image de fond est:

@implementation UINavigationBar (UINavigationBarCategory) 

- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed: @"navbar.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 

@end 

Cependant, qui modifie l'apparence du NavigationBar tout au long de l'application entière. Comment puis-je modifier l'image de fond du NavBar lorsque l'utilisateur navigue d'une vue à l'autre?

Merci d'avance pour votre aide!

Répondre

2

Vous devez définir un certain état de la page en cours ou de l'image actuellement appropriée, probablement dans chacune de vos méthodes viewWillAppear:. Ensuite, modifiez la fonction drawRect: ci-dessus pour référencer cet état.

Pour que la barre soit redessinée, appelez [myNavigationBar setNeedsDisplay] lorsque vous mettez à jour l'état. Cela provoquera l'appel drawRect.

+0

Merci, Seamus, mais il semble que la routine drawRect ne soit appelée que la première fois que la barre de navigation est dessinée. lorsque l'utilisateur navigue plus profondément dans la hiérarchie de navigation, la routine drawRect n'est pas appelée. existe-t-il un moyen de forcer la routine drawRect à être appelée chaque fois que je change de vue? – BeachRunnerFred

+0

Voir ci-dessus. –

+0

merci, Seamus, qui a bien fonctionné! – BeachRunnerFred

0

n'est-il pas possible d'utiliser une vue d'image (ajouter) dans la barre de navigation?

0

Je crois que ce sera la première réponse réelle à cela pour iOS5, le principal problème étant la « suppression » du image de fond une fois que vous avez terminé. Eh bien, gardez juste l'image existante et remettez-la quand vous avez fini.

@implementation MyViewController { 
    UIImage *_defaultImage; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    _defaultImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault]; 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar.png"] forBarMetrics:UIBarMetricsDefault]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [self.navigationController.navigationBar setBackgroundImage:_defaultImage forBarMetrics:UIBarMetricsDefault]; 
} 
0

Vous pouvez utiliser ce code où dans votre application (appeler la méthode viewWillAppeare :) en appelant la méthode pour changer l'image de la barre de navigation. Si vous appelez la méthode dans didFinishLanch, l'image de la barre de navigation est définie sur l'ensemble de l'application.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [[UIDevice currentDevice] systemVersion]; 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) 
    { 
     [self customizeAppearance]; 
    } 

} 

- (void)customizeAppearance 
{ 
    UIImage *navbarimage = [[UIImage imageNamed:@"blckapplication_bar.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0,0,0)]; 
    [[UINavigationBar appearance] setBackgroundImage:navbarimage forBarMetrics:UIBarMetricsDefault]; 

    // Create resizable images  
    // Set the background image for *all* UINavigationBars 
}