Wie füge ich programmgesteuert eine Schaltfläche zu UINavigationBar hinzu?
Wie füge ich programmgesteuert eine Schaltfläche zu UINavigationBar hinzu?
Antworten:
Beispielcode zum Einstellen der rightbutton
auf 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;
[rightbutton release]
unter ARC anzurufen (was zum Zeitpunkt der Erstellung dieses Kommentars noch nicht der Fall war).
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:action
mit 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.
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];
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:)];;
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
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];
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)
}