2012-05-08 10 views
6

Mam dostosowany pasek tytułu kontrolera nawigacji z obrazem w tle, ale naprawdę mam trudności, aby zmienić kolor tła przycisku Wstecz na przezroczysty, tak aby pasował do zielony pasek tytułu pod nim. Jestem dość nowy w rozwoju iOS. Czy ktokolwiek może sugerować, co można zrobić?ios 5 zmienić tło przycisku Wstecz w kontroler nawigacji na przezroczysty

Oto kod użyłem zmienić pasek tytułu kontrolera nawigacyjnego, na wszelki wypadek to pomaga:

- (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: Po wykonaniu trochę badań udało mi się dostać to, co chciałem . Oto kod, aby zmienić obraz tła dla przycisku Wstecz:

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

Powyższy kod dodaje obraz do wszystkich przycisków Wstecz w kontroler nawigacji.

+0

Twoje rozwiązanie nie działa, gdy kontroler nawigacyjny jest prezentowany w sterowniku typu popover. Powodem tego jest to, że tło paska nawigacji i tła elementu przycisku w popover są rysowane inaczej. –

Odpowiedz

5

Nie można zmienić wyglądu domyślnego przycisku Wstecz, ale można utworzyć własny przycisk, aby go zastąpić.

- (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

dzięki za odpowiedź! Działa, ale tylko na jednym poziomie głębokości, a nie na każdym widoku. Ale czy nie ma innej wbudowanej wersji? dzięki! –

+3

żaden inny sposób, który znam. Jeśli chcesz uwzględnić to we wszystkich kontrolerach widoku, utwórz klasę 'BaseViewController', która implementuje to w metodzie' viewDidLoad' i użyj jej jako klasy bazowej dla wszystkich kontrolerów widoku w aplikacji. Po prostu zachowaj ostrożność podczas przesłonięcia viewDidLoad w kontrolerach widoku głównego, aby wywołać '[super viewDidLoad]'. – adig

+0

dzięki adig! To jest pomocne! –

Powiązane problemy