2012-05-08 10 views
6

Ho personalizzato la barra del titolo del controller di navigazione con un'immagine di sfondo, ma ho davvero difficoltà a cambiare il colore di sfondo del pulsante Indietro in modo che corrisponda a sotto la barra del titolo verde. Sono abbastanza nuovo per lo sviluppo di iOS. Qualcuno può suggerire cosa si potrebbe fare?ios 5 cambia lo sfondo del pulsante Indietro nel controller di navigazione in trasparente

Qui è il codice per che ho usato per cambiare la barra del titolo del controller di navigazione, nel caso in cui esso aiuta:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 

} 

EDIT: Dopo aver fatto un po 'di ricerca sono riuscito ad ottenere ciò che volevo . Ecco il codice per modificare l'immagine di sfondo per il pulsante indietro:

UIImage *image1 = [UIImage imageNamed:@"back-bt.png"]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

Il codice di cui sopra si aggiunge l'immagine per tutti i pulsanti posteriori del controller di navigazione.

+0

La soluzione non funzionerà quando il controller di navigazione è presentato in un controller popover. Il motivo è che lo sfondo della barra di navigazione e dello sfondo della barra di navigazione sullo sfondo del popover vengono disegnati in modo diverso. –

risposta

5

Non è possibile modificare l'aspetto del pulsante Indietro predefinito, ma è possibile creare il proprio pulsante per sostituirlo.

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 
    if(self.navigationController.viewControllers.count > 1) { 
     UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

     [backButton setTitle:@"Back" forState:UIControlStateNormal]; 
     [backButton addTarget:self action:@selector(didTapBackButton:) forControlEvents:UIControlEventTouchUpInside]; 
     backButton.frame = CGRectMake(0.0f, 0.0f, 64.0f, 41.0f); 
     UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

     self.navigationItem.leftBarButtonItem = backButtonItem; 
    } 
} 



- (void) didTapBackButton:(id)sender { 
    if(self.navigationController.viewControllers.count > 1) { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 
+0

grazie per la risposta! Funziona, ma solo per un livello di profondità e non per ogni vista. Ma non c'è altro modo integrato? Grazie! –

+3

in nessun altro modo che io conosca. Se vuoi includere questo in tutti i tuoi controller di vista, crea una classe 'BaseViewController' che implementa questo nel metodo' viewDidLoad' e usalo come classe base per tutti i tuoi controller di vista nell'app. Basta fare attenzione quando si esegue l'override di viewDidLoad nei controller della vista principale per chiamare '[super viewDidLoad]'. – adig

+0

grazie adig! È utile! –

Problemi correlati