2010-03-23 2 views

risposta

289

Codice di esempio per impostare rightbutton su un 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 si avrebbe un NavigationController, che vi permetterà di scrivere:

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

Ho ricevuto un avviso sullo stile: il parametro -> Attenzione: Problema semantico: la conversione implicita dal tipo di enumerazione 'UIBarButtonSystemItem' a diversi tipo di enumerazione 'UIBarButtonItemStyle' – pojo

+3

questo dovrebbe essere initWithBarButtonSystemItem: UIBarButtonSystemItemDone per evitare l'avvertimento. – JordanC

+2

Nell'esempio, non capisco da dove provenga "bar". Qual è la proprietà di barra superiore predefinita per UINavigationItem? – aneuryzm

20

Le risposte di cui sopra sono buoni, ma mi piacerebbe carne fuori con un paio di suggerimenti:

Se si desidera modificare il titolo del pulsante Indietro (quello a forma di freccia-y alla sinistra della barra di navigazione) è NECESSARIO 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 nascondere il pulsante Indietro durante uno stato speciale, ad esempio durante la visualizzazione di UIPickerView, utilizzare self.navigationItem.hidesBackButton = YES; e ricordarsi di reimpostarlo quando si lascia lo stato speciale.

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

Ricordate, il significato di quel simbolo è a voi, ma fate attenzione delle Human Interface Guidelines. Usando UIBarButtonSystemItemAdd per significare la cancellazione di un oggetto probabilmente la tua applicazione verrà respinta.

11

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]; 
7

Nell'esempio seguente verrà visualizzato un pulsante con il titolo "Contatto" nella 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:)];; 

enter image description here

2

perché non utilizzare il seguente: (da Draw custom Back button on iPhone Navigation Bar)

// 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]; 
3

In Swift 2, si dovrebbe fare:

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

rapida 3

0.123.
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) 
    }