2 Stimmen

Navigation Zurück Schaltfläche Element Ereignis in iPhone-Anwendung

Ich arbeite gerade an einer iPhone-Anwendung. Die Anwendung hat eine Navigationsleiste am oberen Rand. Ich habe zwei Ansichten: "Ansicht1" und "Ansicht2". Wenn man auf den "View2"-Ansichts-Controller drückt, zeigt die Navigationsleiste eine Zurück-Schaltfläche mit dem Titel der "View1"-Ansicht, so dass man zu View1 zurückkehren kann.

Meine Frage ist nun, welches Ereignis ausgelöst wird, wenn Sie auf diese Schaltfläche klicken? Ist es auch möglich, den Text der Schaltfläche "Zurück" in der Navigationsleiste zu ändern?

Für jede Hilfe wären wir Ihnen dankbar.

Danke

5voto

Ed Marty Punkte 39312

Es gibt kein spezielles Ereignis, das man nur für die Zurück-Taste bekommen kann. Sie können verschiedene viewWillAppear: , viewWillDisappear: , etc. stattdessen. z.B.:

//In View2:
- (void) viewWillDisappear:(BOOL) animated {
    [super viewWillDisappear:animated];
    if (!goingToSubscreen) {
        //Do something important here
    }
    goingToSubscreen = NO;
}

//In View1:
- (void) viewWillAppear:(BOOL) animated {
    [super viewWillAppear:animated];
    if (wentToSubscreen) {
        //Do something important here
    }
    wentToSubscreen = NO;
}

Beachten Sie, dass die Booleschen Werte wentToSubscreen und goingToSubscreen als named eingerichtet werden sollten. Wenn Sie einen anderen View auf den Navigationscontroller über View2 schieben, sollten Sie goingToSubscreen auf YES setzen, damit er nicht die wichtigen Dinge tut. Umgekehrt sollten Sie goToSubscreen für View1 auf YES setzen, nachdem Sie View2 geschoben haben, damit beim erneuten Erscheinen von View2 erst nach der Rückkehr von diesem Bildschirm etwas Interessantes passiert, und nicht schon beim ersten Erscheinen von View1.

Edita: Ab iOS 5.0, I glauben gibt es dafür eingebaute Eigenschaften. isBeingDismissed wird eingestellt auf YES während viewWillDisappear: y viewDidDisappear: für den Fall, dass Sie die Zurück-Taste drücken. Als Referenz können Sie die folgenden Eigenschaften überprüfen:

isMovingFromParentViewController
isMovingToParentViewController
isBeingPresented
isBeingDismissed

Was die Änderung des Titels der Schaltfläche "Zurück" betrifft, so gehört diese Eigenschaft zum Element "Zurück" der vorherigen Ansicht:

View1.navigationItem.backBarButtonItem.title = @"My New Title";

oder:

View1.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"New Title" style:UIBarButtonItemStyleBordered target:nil action:nil] autorelease];

Die dritte Möglichkeit besteht darin, die Zurück-Schaltfläche durch eine benutzerdefinierte Schaltfläche zu ersetzen. Damit können Sie Ihre eigene Methode angeben, die Sie aufrufen können, so dass Sie nicht die Methode -viewWillDisappear: aber dadurch wird die Schaltfläche als Rechteck anstelle einer Schaltfläche mit einem Rückwärtspfeil angezeigt. Diese Schaltfläche erscheint in Ansicht2 statt in Ansicht1:

View2.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"New Title" style:UIBarButtonItemStyleDone target:self action:@selector(dismissView)] autorelease];

0voto

poGUIst Punkte 307

Ich bin mit dieser Lösung für Hook popping View Controller.

// In some view controller
- (void) viewDidDisappear:(BOOL)animated
{
    if (self.navigationController == nil) {
        // popped from navigation stack.
        // do something...
    }
}

Aber es hakt nicht ein, wenn View-Controller, die über self geschoben werden, popToViewController:animated: mit Controller unter self im Stapel oder popToRootViewController:animated aufrufen:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X