Pytanie w sprawie ios, ios5, uinavigationcontroller, xcode4.2 – ios 5 zmienia tło przycisku Wstecz w kontrolerze nawigacyjnym na przezroczysty

6

Dostosowałem pasek tytułu kontrolera nawigacji z obrazem tła, ale naprawdę staram się zmienić kolor tła przycisku Wstecz na przezroczysty, aby pasował do zielonego paska tytułu pod nim. Jestem całkiem nowy w rozwoju iOS. Czy ktoś może zasugerować, co można zrobić?

Oto kod, za pomocą którego zmieniłem pasek tytułu kontrolera nawigacji, na wszelki wypadek:

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

}
</code>

EDYTOWAĆ: Po kilku badaniach udało mi się zdobyć to, co chciałem. Oto kod do zmiany obrazu tła przycisku Wstecz:

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

Powyższy kod dodaje obraz do wszystkich przycisków tylnych w kontrolerze nawigacyjnym.

Twoje rozwiązanie nie zadziała, gdy kontroler nawigacyjny zostanie przedstawiony w kontrolerze Popover. Powodem tego jest to, że tło i pasek tylnego paska na pasku nawigacji w tle są rysowane inaczej. Tuyen Dinh

Twoja odpowiedź

1   odpowiedź
5

ale możesz utworzyć własny przycisk, aby go zastąpić.

<code>- (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];
    }
}
</code>
dzięki adig! To jest pomocne! Kite Runner
nie wiem inaczej. Jeśli chcesz to uwzględnić we wszystkich kontrolerach widoku, utwórzBaseViewController klasa, która implementuje to naviewDidLoad i użyj go jako klasy bazowej dla wszystkich kontrolerów widoku w aplikacji. Po prostu uważaj, gdy nadpisujesz viewDidLoad w kontrolerach głównego widoku, aby wywołać[super viewDidLoad]. adig
Dziękuję za odpowiedź! Działa, ale tylko na jeden poziom, a nie na każdy widok. Ale czy nie ma innego sposobu na to? dzięki! Kite Runner

Powiązane pytania