Come aggiungere un pulsante a UINavigationBar?

Come aggiungere un pulsante a UINavigationBar al livello di programmazione?

Esempio di codice per impostare il rightbutton su una rightbutton 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 permette di scrivere:

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

Le risposte sopra sono buone, ma mi piacerebbe arricchirle con qualche altro consiglio:

Se si desidera modificare il titolo del pulsante Indietro (quello a forma di freccia-y alla sinistra della barra di navigazione) DEVI farlo nel controller di visualizzazione PRECEDENTE, non quello per il quale verrà visualizzato. È come dire “hey, se mai premi un altro controller di visualizzazione su questo, chiama il pulsante indietro” Indietro “(o qualsiasi altra cosa) invece del valore predefinito.”

Se si desidera hide il pulsante Indietro durante uno stato speciale, ad esempio durante la visualizzazione di UIPickerView, utilizzare self.navigationItem.hidesBackButton = YES; e ricorda di reimpostarlo quando lasci lo stato speciale.

Se si desidera visualizzare uno dei pulsanti simbolici speciali, utilizzare il modulo initWithBarButtonSystemItem:target:action con un valore come UIBarButtonSystemItemAdd

Ricorda, il significato di questo simbolo spetta a te, ma fai attenzione alle linee guida dell’interfaccia umana. Usando UIBarButtonSystemItemAdd per significare la cancellazione di un object probabilmente la tua applicazione verrà respinta.

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 mostrerà un pulsante con un titolo “Contatto” sulla barra di navigazione sulla 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:)];; 

inserisci la descrizione dell'immagine qui

In Swift 2, dovresti fare:

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

Perché non utilizzare quanto segue: (dal pulsante Disegna personalizzato Indietro 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) }