Establezca la image de background de UINavigationBar en ViewController

Puedo establecer el background de mi barra de navigation en una image personalizada en el método del delegado de la aplicación didFinishLaunchingWithOptions con este código:

UIImage *navBarImage; navBarImage = [UIImage imageNamed:@"navbar.png"]; [[UINavigationBar appearance] setBackgroundImage: navBarImage forBarMetrics:UIBarMetricsDefault]; 

Estoy intentando agregar una opción en mi aplicación para cambiar la image de background de la barra de navigation cuando se cambia un interruptor, pero parece que no funciona. ¿Solo es posible configurar la image de background cuando se inicia la aplicación? ¿Cómo puedo hacer esto después de que la aplicación ya se haya iniciado?

Este es el código que tengo:

 - (void) switchChanged:(id)sender { UISwitch* switchView = sender; if (switchView.isOn) { UIImage *navBarImage = [UIImage imageNamed:@"black_nav.png"]; [[UINavigationBar appearance] setBackgroundImage: navBarImage forBarMetrics:UIBarMetricsDefault]; } else { UIImage *navBarImage = [UIImage imageNamed:@"white_nav.png"]; [[UINavigationBar appearance] setBackgroundImage: navBarImage forBarMetrics:UIBarMetricsDefault]; } } 

Use setBackgroundImage:forBarMetrics: method:

 [navbar setBackgroundImage:[UIImage imageNamed:@"navbar"] forBarMetrics:UIBarMetricsDefault]; 

Puede replace el valor pnetworkingeterminado en cada vista haciendo esto:

 UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)]; [imageView setImage:[UIImage imageNamed:@"newImage.png"]]; [self.navigationController.navigationBar addSubview:imageView]; [self.navigationController.navigationBar sendSubviewToBack:imageView]; 

Prueba esta

// Crear imágenes networkingimensionables

 UIImage *gradientImage44 = [[UIImage imageNamed:@"surf_gradient_textunetworking_44"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; UIImage *gradientImage32 = [[UIImage imageNamed:@"surf_gradient_textunetworking_32"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 

// Establezca la image de background para todos los UINavigationBars

  [[UINavigationBar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault]; [[UINavigationBar appearance] setBackgroundImage:gradientImage32 forBarMetrics:UIBarMetricsLandscapePhone];