Frage an xcode4.2, ios, ios5, uinavigationcontroller – ios 5 ändert den Hintergrund der Zurück-Schaltfläche im Navigations-Controller in transparent

6

Ich habe die Titelleiste des Navigationscontrollers mit einem Hintergrundbild versehen, aber ich habe große Probleme, die Hintergrundfarbe der Schaltfläche "Zurück" in "Transparent" zu ändern, damit sie mit der grünen Titelleiste darunter übereinstimmt. Ich bin ziemlich neu in der iOS-Entwicklung. Kann jemand vorschlagen, was getan werden könnte?

Hier ist der Code, mit dem ich die Titelleiste des Navigationscontrollers geändert habe, für den Fall, dass es hilft:

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

BEARBEITEN: Nach ein paar Recherchen habe ich es geschafft, das zu bekommen, was ich wollte. Hier ist der Code zum Ändern des Hintergrundbilds für die Zurück-Schaltfläche:

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

Der obige Code fügt das Bild allen Zurück-Schaltflächen im Navigationscontroller hinzu.

Ihre Lösung funktioniert nicht, wenn der Navigationscontroller in einem Popover-Controller dargestellt wird. Der Grund dafür ist, dass der Hintergrund der Navigationsleiste und der Hintergrund des Schaltflächenelements der hinteren Leiste im Popover unterschiedlich gezeichnet sind. Tuyen Dinh

Deine Antwort

1   die antwort
5

Sie können das Erscheinungsbild der Standardschaltfläche "Zurück" nicht ändern, aber Sie können eine eigene Schaltfläche erstellen, um sie zu ersetzen.

<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>
danke adig! Es ist hilfreich! Kite Runner
Kein anderer Weg, den ich kenne. Wenn Sie dies in alle Ihre View-Controller aufnehmen möchten, erstellen Sie einBaseViewController Klasse, die dies auf der implementiertviewDidLoad Methode und verwenden Sie es als Basisklasse für alle Ihre View Controller in der App. Seien Sie vorsichtig, wenn Sie viewDidLoad in Ihren Hauptansichts-Controllern überschreiben, um das aufzurufen[super viewDidLoad]. adig
Danke für die Antwort! Es funktioniert, aber nur für eine Ebene tief und nicht für jede Ansicht. Aber gibt es keinen anderen Weg eingebaut? Vielen Dank! Kite Runner

Verwandte Fragen