Wie verstecke ich die Schaltfläche "Zurück" in UINavigationController?


158

Wissen Sie, wie Sie die Schaltfläche "Zurück" in einem UINavigationController ausblenden können? Auch, wie man es zurück zeigt, aber ich denke, das ist dem Verstecken sehr ähnlich ...

Genau wie die E-Mail-Anwendung auf dem iPhone, wenn Sie beim Anzeigen von E-Mails auf "Bearbeiten" klicken.

Antworten:


313

Ich habe gerade die Antwort herausgefunden, in einem Controller verwenden Sie diese:

[self.navigationItem setHidesBackButton:YES animated:YES];

Und um es wiederherzustellen:

[self.navigationItem setHidesBackButton:NO animated:YES];

- -

[AKTUALISIEREN]

Swift 3.0:

self.navigationItem.setHidesBackButton(true, animated:true)

18
Lernen Sie auch aus meinem Fehler: Sie müssen aufrufen, setHidesBackButton:bevor Sie das Navigationselement in den Navigationscontroller schieben.
CodingFriend1

warum vorher? Was ist, wenn Sie einen viewController drücken und dann die Zurück-Schaltfläche ausblenden möchten, um zu verhindern, dass der Benutzer zurückkehrt?
user4951

1
@codingFriend - Ich finde, dass dies auch funktioniert, wenn Sie den setHidesBackButton in den viewDidAppear-Nachrichtenhandler der Ansicht einfügen, in der Sie den Backbutton nicht anzeigen möchten.
Anon

2
Die besten Ereignisse dafür sind viewWillAppear:animated, es auszublenden und viewWillDisappear:animatedwiederherzustellen.
Pechar

Endlich etwas, das Apple in Xcode nicht geändert hat. Mehr als 5 Jahre später funktioniert diese Antwort immer noch hervorragend.
App Dev Guy

27

Fügen Sie diesen Code hinzu

[self.navigationItem setHidesBackButton:YES];

22

Vergessen Sie nicht, dass der Benutzer nicht nur die Zurück-Schaltfläche entfernt (mit den bereits empfohlenen Methoden), sondern auch mit einer Wischgeste von links nach rechts in iOS 7 und höher zum vorherigen Bildschirm zurückkehren kann.

Um dies zu deaktivieren (falls zutreffend), implementieren Sie Folgendes (z. B. in viewDidLoad):

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;

1
Matt - +1 für Sie. Vielen Dank für das Hinzufügen dieser Notiz. Sehr hilfreich. Wenn Sie sich fragen, wie die Pop-Geste funktioniert, wischen Sie einfach in Ihrer Navigationsleiste von links nach rechts, um das zu erstellen, was Matt hier beschreibt. Das Hinzufügen des obigen Codes verhindert, dass der Benutzer dies auf dem View Controller tut, auf dem er enthalten ist.
Noobzilla

18

Nur um vorhandene Antworten zu klären: Die hidesBackButtonEigenschaft ist die richtige Antwort, aber in vielen Antworten ist nicht klar, worauf sie sich selfbezieht. Grundsätzlich sollten Sie self.navigationItem.hidesBackButton = YESim View Controller festlegen , dass der Push (oder nur Push) auf den UINavigationController.

Mit anderen Worten, sagen wir, ich habe einen UINavigationControllerNamen myNavController. Ich möchte eine neue Ansicht darauf setzen, und wenn ich das tue, möchte ich nicht mehr, dass die Schaltfläche "Zurück" angezeigt wird. Ich könnte so etwas machen wie:

UIViewController *newVC = [[UIViewController alloc] init];
//presumably would do some stuff here to set up the new view controller
newVC.navigationItem.hidesBackButton = YES;
[myNavController pushViewController:newVC animated:YES];

Wenn der Code beendet ist, sollte die von gesteuerte Ansicht newVCjetzt angezeigt werden und es sollte keine Schaltfläche "Zurück" sichtbar sein.


Genau das, was ich brauchte, als ich NavigationController.NavigationItem zum ersten Mal machte. Danke Matt.
Chucky

16

Zum bedingten Ausblenden und Anzeigen der Schaltfläche Zurück können Sie folgenden Code verwenden:

-(void)viewDidAppear:(BOOL)animated
{
    if ([tempAry count]==0)
    {
        [self.navigationItem setHidesBackButton:YES animated:YES];
    }
    else
    {
        [self.navigationItem setHidesBackButton:NO animated:YES];
    }
    [super viewDidAppear:animated];
} 

Hinweis: In einigen Fällen müssen Sie es in die viewDidAppear-Methode anstelle von viewWillAppear einfügen, z. B.: Wenn Sie das Array der nächsten Klasse in die vorherige Klasse aktualisieren und dann die Bedingung wie oben in der nächsten Klasse überprüfen.


11

Swift iOS (ich habe folgendes verwendet)

// hide back button
        self.navigationItem.setHidesBackButton(true, animated: false)

// pgrm mark ----- ------

    // hide the back button for this view controller

    override func setEditing(editing: Bool, animated: Bool) {
        super.setEditing(editing, animated: animated)

        self.navigationItem.setHidesBackButton(editing, animated: animated)

    }// end setEditing

10

Sethidesbackbutton hat bei mir aus irgendeinem Grund nicht funktioniert

Ich habe diesen Weg benutzt ->

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;

danke ..Ich hatte das gleiche Problem, bei dem setHidesBackButton: YES nicht funktioniert hat. Aber diese Lösung funktionierte für iOS 7.
Mohsinj


6

In meinem Fall hatte ich einige Probleme mit aktuellen Antworten:

  • In viewDidLoad / viewWillAppear wurde nur das Symbol "Zurück" ausgeblendet und die Zeichenfolge "Zurück" war inaktiv, aber immer noch sichtbar
  • In viewDidAppear ist die Schaltfläche "Zurück" verschwunden ... aber ich wollte nicht, dass der Benutzer sie überhaupt sieht

Die Lösung, die endlich für mich funktioniert hat, ist:

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];

    if (self) {
        [self.navigationItem setHidesBackButton:YES animated:NO];
    }

    return self;
}

3

Die von Zoran Simic vorgeschlagene Lösung hat aus irgendeinem Grund bei mir nicht funktioniert.

Dieser Code hat jedoch funktioniert:

MyController* controller   =   [[MyController alloc]  init];
NSArray* array             =   [[[NSArray alloc] initWithObjects:controller, nil] autorelease];

[self.navigationController setViewControllers:array animated:NO];

[controller release];

Natürlich müssten Sie ein NSArray nach Ihrem Geschmack manipulieren, damit es für Sie funktioniert. Hoffe das hilft jemandem :)


Danke dafür! Ich habe gegen einen seltsamen Bug gekämpft und das hat den Trick gemacht. Nicht für jedermann, aber in den richtigen Fällen nützlich.
Brandon

1

In meiner UIViewController-Unterklasse habe ich folgende Methode:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated: animated];

    // hide back button in edit mode
    [self.navigationItem setHidesBackButton:editing animated:YES];
}

0

Dadurch wird die Schaltfläche "Zurück" ausgeblendet und in Swift durch eine Schaltfläche "Hinzufügen" ersetzt:

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    // This hides the back button while in editing mode, which makes room for an add item button
    self.navigationItem.setHidesBackButton(editing, animated: animated)

    if editing {
        // This adds the add item button
        let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
        // Use the animated setter for the left button so that add button fades in while the back button fades out
        self.navigationItem.setLeftBarButton(addButton, animated: animated)
        self.enableBackGesture(enabled: false)
    } else {
        // This removes the add item button
        self.navigationItem.setLeftBarButton(nil, animated: animated)
        self.enableBackGesture(enabled: true)
    }
}

func enableBackGesture(enabled: Bool) {
    // In addition to removing the back button and adding the add item button while in edit mode, the user can still exit to the previous screen with a left-to-right swipe gesture in iOS 7 and later. This code disables this action while in edit mode.
    if let navigationController = self.navigationController {
        if let interactivePopGestureRecognizer = navigationController.interactivePopGestureRecognizer {
            interactivePopGestureRecognizer.isEnabled = enabled
        }
    }
}

0

Swift 3.

Im Allgemeinen sollten Sie die Per-ViewController-API von Apple verwenden, wie bereits auf dieser Seite beschrieben, aber manchmal müssen Sie die Schaltfläche Zurück sofort steuern.

Der folgende Code verbirgt die Schaltfläche "Zurück" und stellt sicher, dass im Bereich der ausgeblendeten Schaltflächen keine Erkennung von Tap-Kollisionen erfolgt.

let emptyView = UIView(frame: .zero)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: emptyView)

0

Dadurch wird die Zurück-Taste ausgeblendet

let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil)


navigationItem.leftBarButtonItem = backBtn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.