Wie füge ich eine Schaltfläche zur UINavigationBar hinzu?


Antworten:


294

Beispielcode zum Einstellen der rightbuttonauf a NavigationBar.

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
    style:UIBarButtonItemStyleDone target:nil action:nil];
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"];
item.rightBarButtonItem = rightButton;
item.hidesBackButton = YES;
[bar pushNavigationItem:item animated:NO];

Aber normalerweise hätten Sie eine NavigationController, mit der Sie schreiben können:

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
    style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.rightBarButtonItem = rightButton;

1
Ich erhalte eine Warnung zum Stil: Parameter -> Warnung: Semantisches Problem: Implizite Konvertierung vom Aufzählungstyp 'UIBarButtonSystemItem' in einen anderen Aufzählungstyp 'UIBarButtonItemStyle'
Pojo

3
Dies sollte initWithBarButtonSystemItem: UIBarButtonSystemItemDone sein, um die Warnung zu vermeiden.
Jordanien

2
Im Beispiel verstehe ich nicht, woher "Bar" kommt. Was ist die Standard-Top-Bar-Eigenschaft für ein UINavigationItem?
aneuryzm

Die Balkenvariable in der Antwort ist eine Navigationsleiste, die nicht von einem Navigationscontroller verwaltet wird. Wenn Sie über einen Navigationscontroller verfügen, verfügt dieser über eine eigene Navigationsleiste, die verwaltet wird. In diesem Fall sollte jeder Ansichtscontroller, den Sie an den Navigationscontroller senden, ein eigenes Navigationselement konfigurieren (einschließlich des Festlegens des rightBarButtonItem in einem eigenen Navigationselement Eigentum).
Vasiliy Kulakov

Für aktuelle Leser glaube ich nicht, dass es einen Grund gibt, [rightbutton release]unter ARC anzurufen (was zum Zeitpunkt der Erstellung dieses Kommentars noch nicht der Fall war).
Carbokation

20

Die obigen Antworten sind gut, aber ich möchte sie mit ein paar weiteren Tipps ausarbeiten:

Wenn Sie den Titel der Zurück-Schaltfläche ändern möchten (der Pfeil in der linken Ecke der Navigationsleiste), MÜSSEN Sie dies im VORHERIGEN Ansichts-Controller tun, nicht in dem, für den er angezeigt wird. Es ist so, als würde man sagen: "Hey, wenn Sie jemals einen anderen Ansichts-Controller darüber schieben, rufen Sie die Zurück-Schaltfläche" Zurück "(oder was auch immer) anstelle der Standardeinstellung auf."

Wenn Sie die Zurück-Schaltfläche während eines speziellen Status ausblenden möchten, z. B. während eine UIPickerView angezeigt wird, verwenden Sie sie self.navigationItem.hidesBackButton = YES;und denken Sie daran, sie zurückzusetzen, wenn Sie den speziellen Status verlassen.

Wenn Sie eine der speziellen symbolischen Schaltflächen anzeigen möchten, verwenden Sie das Formular initWithBarButtonSystemItem:target:actionmit einem Wert wieUIBarButtonSystemItemAdd

Denken Sie daran, dass die Bedeutung dieses Symbols bei Ihnen liegt. Beachten Sie jedoch die Richtlinien für die Benutzeroberfläche. Wenn Sie UIBarButtonSystemItemAdd verwenden, um ein Element zu löschen, wird Ihre Bewerbung wahrscheinlich abgelehnt.


11

Hinzufügen einer benutzerdefinierten Schaltfläche zur Navigationsleiste (mit Bild für buttonItem und Angabe der Aktionsmethode (void) openView {} und).

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 32, 32);
[button setImage:[UIImage imageNamed:@"settings_b.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(openView) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *barButton=[[UIBarButtonItem alloc] init];
[barButton setCustomView:button];
self.navigationItem.rightBarButtonItem=barButton;

[button release];
[barButton release];

7

Im folgenden Beispiel wird eine Schaltfläche mit dem Titel "Kontakt" in der Navigationsleiste rechts angezeigt. Seine Aktion ruft eine Methode namens "contact" vom viewcontroller auf. Ohne diese Zeile ist die rechte Schaltfläche nicht sichtbar.

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
                                                                          style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;

Geben Sie hier die Bildbeschreibung ein


3

In Swift 2 würden Sie Folgendes tun:

let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton

(Keine große Änderung) In Swift 4/5 wird es sein:

let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton

2

Verwenden Sie Folgendes: (über die Schaltfläche Benutzerdefinierte Zurück zeichnen in der iPhone-Navigationsleiste )

// Add left
UINavigationItem *previousItem = [[UINavigationItem alloc] initWithTitle:@"Back title"];
UINavigationItem *currentItem = [[UINavigationItem alloc] initWithTitle:@"Main Title"];
[self.navigationController.navigationBar setItems:[NSArray arrayWithObjects:previousItem, currentItem, nil] animated:YES];

// set the delegate to self
[self.navigationController.navigationBar setDelegate:self];

0

schnell 3

    let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(cancelPressed(_:)))
    cancelBarButton.setTitleTextAttributes( [NSFontAttributeName : UIFont.cancelBarButtonFont(),
                                                          NSForegroundColorAttributeName : UIColor.white], for: .normal)
    self.navigationItem.leftBarButtonItem = cancelBarButton


    func cancelPressed(_ sender: UIBarButtonItem ) {
        self.dismiss(animated: true, completion: nil)
    }
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.