Come aggiungere un pulsante a UINavigationBar a livello di programmazione?Come aggiungere un pulsante a UINavigationBar?
risposta
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;
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.
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];
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:)];;
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];
In Swift 2, si dovrebbe fare:
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
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)
}
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
questo dovrebbe essere initWithBarButtonSystemItem: UIBarButtonSystemItemDone per evitare l'avvertimento. – JordanC
Nell'esempio, non capisco da dove provenga "bar". Qual è la proprietà di barra superiore predefinita per UINavigationItem? – aneuryzm