32 Stimmen

Entfernen der Schaltfläche in der rechten Leiste aus dem Navigationselement

Ich habe eine Schaltfläche für die rechte Leiste in meinem Navigationselement hinzugefügt und möchte diese unter bestimmten Bedingungen entfernen. Dies ist, was ich tue:

self.navigationItem.rightBarButtonItem = nil;

Aber das gewünschte Verhalten wird nicht erreicht.

Ich möchte sie ausblenden, finde aber keine Methode dafür.

21voto

Erik B Punkte 38197

Was Sie tun, sollte funktionieren. Ich habe das schon oft gemacht. Sind Sie sicher, dass Sie die Schaltfläche aus dem richtigen Navigationselement entfernen? Ist self die aktuell angezeigte UIViewController ?

11voto

budiDino Punkte 12048

Mauersegler 5/4/3 - Ich habe einige Schaltflächen auf der linken und rechten Seite der Navigationsleiste, die ich damit ausblende:

func hideNavItems() {
  navigationItem.setLeftBarButtonItems(nil, animated: true)
  navigationItem.setRightBarButtonItems(nil, animated: true)
}

In meinem Fall muss ich diese Schaltflächen zu einem späteren Zeitpunkt wieder anzeigen, also behalte ich sie in einem Array:

var leftNavItems: [UIBarButtonItem]!
var rightNavItems: [UIBarButtonItem]!

und dann rufe ich einfach eine Funktion auf, um sie anzuzeigen (wieder hinzuzufügen):

func showNavItems() {
  navigationItem.setLeftBarButtonItems(leftNavItems, animated: true)
  navigationItem.setRightBarButtonItems(rightNavItems, animated: true)
}

9voto

Jirson Tavera Punkte 1263

Ich kenne drei Möglichkeiten: (Überlagerung auf der rechten Seite)

  1. wenn Sie mehr als eine Leistenschaltfläche haben:
    self.navigationItem.rightBarButtonItems = nil

  2. sonst, wenn Sie nur eine Bar-Taste haben
    self.navigationItem.rightBarButtonItem = nil

  3. eine Nulltaste setzen:
    self.navigationItem.setRightBarButtonItem(nil, animated: false)

2voto

edzio27 Punkte 4076

Ich habe es gelöst, indem ich ein neues rightBarButtonItem erstellt habe.

Eigenschaft erstellen:

@property (nonatomic, strong) UIBarButtonItem *clearRightButtonItem;

Synthetisieren:

@synthesize clearRightButtonItem = _clearRightButtonItem;

Getter erstellen:

- (UIBarButtonItem *) clearRightButtonItem {
    if (_clearRightButtonItem == nil) {
        UIButton *rightButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 38, 38)];
        [rightButton setImage:nil forState:UIControlStateNormal];
        _clearRightButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
    }
    return _clearRightButtonItem;
}

Und setzen Sie dann rightBarButtonItem mit new clearRightButtonItem:

self.rightButtonItem = self.clearRightButtonItem;

1voto

Abhinav Singh Punkte 7444

Meine Antwort bezieht sich nicht speziell auf diese Frage, aber da dies das Top-Ergebnis auf Google ist, werde ich meine Erfahrung mit dem Problem beitragen

Ich hatte ein Array von Elementen für rightBarButtonItem verwendet, daher irgendwie mit

    self.navigationItem.rightBarButtonItem = nil;

funktionierte bei mir nicht, also erstellte ich ein leeres Barbutton-Element und setzte es als rightBarButtonItem mit

    [self.navigationItem setRightBarButtonItems:@[self.clearRightButtonItem]];

und jetzt ist es weg.

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