UINavigationController mit Custom Back-Button

Wenn man innerhalb des UINavigationControllers einen weiteren ViewController in den Stack lädt, dann wird der Zurück-Button im Normalfall selbstständig vom jeweils aktiven NavigationController verwaltet. Dieses Verhalten führt zwar dazu, dass sich der Nutzer immer sofort „heimisch“ in der App fühlt, denn letztendlich ist dann alles ganz „Apple-Like“, aber in einigen seltenen Fällen möchte man vielleicht doch lieber einen eigenen Button für die Zurück-Funktion innerhalb seiner App verwenden.

Vor genau diesem Problem stand ich kürzlich bei den Arbeiten für die App IAK Hund, die wir momentan im Auftrag der IAK GmbH in unserem Haus entwickeln. Durch die Verwendung eines Custom-BackgroundView in der NavigationBar passten die Apple-typischen UIBarButtonItem Elemente natürlich optisch nicht mehr in den Header und so habe ich mir letztendlich ganz einfach selber einen eigenen Back-Button erstellt.

#pragma mark -
#pragma mark View Lifecycle

- (void)viewDidLoad {
    [super viewDidLoad];

    // Custom Back Button
    UIImage *backImage = [UIImage imageNamed:@"IconBack.png"];
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    backButton.frame = CGRectMake(0, 0, backImage.size.width, backImage.size.height);

    [backButton setImage:backImage forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(pushBackButton:) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *backBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];

    self.navigationItem.hidesBackButton = YES;
    self.navigationItem.leftBarButtonItem = backBarButtonItem;
}

#pragma mark -
#pragma mark Private Methods

- (void)pushBackButton:(id)sender {
    [self.navigationController popViewControllerAnimated:YES];
}

Wichtig sind in diesem Zusammenhang folgende Punkte:

  • Zunächst müssen wir durch Setzen der Property hidesBackButton den alten Back-Button im Controller ausblenden. Dabei ist wichtig zu wissen, dass der Button lediglich von uns ausgeblendet wird. Er bleibt also weiterhin im Controller inkl. seiner Funktionalität vorhanden.
  • Da die eigentliche Methode zur Entfernung des aktiven ViewControllers ja noch an den Ursprungs-Button gebunden ist, benötigen wir mit pushBackButton natürlich auch eine entsprechende Methode, die diese Funktion für unseren eigenen Button übernehmen kann.

1 comment for “UINavigationController mit Custom Back-Button

  1. Alex
    5. Oktober 2011 at 15:47

    Danke für den Beitrag…hat mir schnell geholfen 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.