Come aggiungere un pulsante a UINavigationBar a livello di codice?
Come aggiungere un pulsante a UINavigationBar a livello di codice?
Risposte:
Codice di esempio per impostare rightbutton
su 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];
Ma normalmente avresti un NavigationController
, che ti consente di scrivere:
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.rightBarButtonItem = rightButton;
[rightbutton release]
sotto ARC (che non esisteva al momento in cui questo commento è stato originariamente scritto).
Le risposte sopra sono buone, ma mi piacerebbe arricchirle con alcuni suggerimenti in più:
Se vuoi modificare il titolo del pulsante indietro (la freccia che guarda quello a sinistra della barra di navigazione) DEVI farlo nel controller di visualizzazione PRECEDENTE, non quello per il quale verrà visualizzato. È come dire "ehi, se mai spingi un altro controller di visualizzazione sopra questo, chiama il pulsante Indietro" Indietro "(o qualsiasi altra cosa) invece di quello predefinito."
Se desideri nascondere il pulsante Indietro durante uno stato speciale, ad esempio durante la visualizzazione di un UIPickerView, utilizza self.navigationItem.hidesBackButton = YES;
e ricorda di reimpostarlo quando esci dallo stato speciale.
Se si desidera visualizzare uno dei pulsanti simbolici speciali, utilizzare il modulo initWithBarButtonSystemItem:target:action
con un valore simileUIBarButtonSystemItemAdd
Ricorda, il significato di quel simbolo dipende da te, ma fai attenzione alle Linee guida dell'interfaccia umana. L'uso di UIBarButtonSystemItemAdd per indicare l'eliminazione di un elemento probabilmente farà rifiutare la tua applicazione.
Aggiunta di un pulsante personalizzato alla barra di navigazione (con l'immagine per buttonItem e specificando il metodo di azione (void) openView {} e).
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];
L'esempio seguente visualizzerà un pulsante con il titolo "Contatto" sulla barra di navigazione a destra. La sua azione chiama un metodo chiamato "contact" dal viewcontroller. Senza questa linea il pulsante destro non è visibile.
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;
In Swift 2, faresti:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
(Non un cambiamento importante) In Swift 4/5, sarà:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
Perché non utilizzare quanto segue: (da Disegna pulsante Indietro personalizzato sulla barra di navigazione di iPhone )
// 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];
rapido 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)
}