2010-04-03 12 views
7

Sto provando a impostare un elenco di elementi che possono essere modificati. Ho una vista principale, con una UINavigationBar nella parte superiore e una UITableView direttamente sotto di essa. Mi piacerebbe che il mio pulsante "modifica" diventasse un pulsante "completato" al momento del clic, ma non riesco a capire come farlo.Come modificare un UIBarButtonItem in una UINavigationBar

Se potessi farlo nel codice (non nel generatore di interfacce), potrei semplicemente sostituirlo, ma non posso nemmeno farlo. Ho visto del codice usando [self.navigationItem], ma nel mio caso self è un UIView.

Mi sembra anche strano usare UINavigationBar quando non desidero la navigazione (questa è solo una pagina), ma voglio una barra con un titolo e un pulsante, quindi non penso davvero avere una scelta.

risposta

15

Creo un pulsante che può essere modificato da Modifica a Fine. È un consiglio da altro libro di sviluppo iPhone.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIBarButtonItem *editButton = self.editButtonItem; 
    [editButton setTarget:self]; 
    [editButton setAction:@selector(toggleEdit)]; 
    self.navigationItem.leftBarButtonItem = editButton; 
} 

E il metodo toggleEdit

- (IBAction)toggleEdit { 
    BOOL editing = !self.tableView.editing; 
    self.navigationItem.rightBarButtonItem.enabled = !editing; 
    if (editing) { 
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done"); 
    //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone 
    self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone; 
} 
else{ 
    self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit"); 
    //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone 
    self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStylePlain; 
} 
    [self.tableView setEditing:editing animated:YES]; 
} 

Allora non occorre sostituire nessuno di loro.

+0

Ah, sì, che sembra buono. Però, non penso che tu abbia il bello stile "Fatto" in quel modo, in cui il pulsante è un colore leggermente diverso. –

+0

Ora con la modifica dello stile, il pulsante FATTO di questo codice è esattamente uguale a UIBarButtonSystemItemDone. – wal

0

Trovato! Sembra che tu possa arrivare a UINavigationItem usando la proprietà topItem. Dovevo solo leggere i documenti, come sempre!

4

Quando si utilizza self.editButtonItem, non è necessario modificare lo stile e il testo del pulsante, viene eseguito automaticamente. Prova a rimuovere quel codice, funzionerà ancora :)

2

imposta il pulsante di navigazione in IB con i seguenti linkati in IB e crea una presa chiamata editOutlet e un'azione chiamata editToggle nel tuo file di intestazione e il tuo metodo è facile come questo:

-(IBAction) editToggle:(id) sender { 

if (self.tableViewOutlet.isEditing == NO) { 

    self.editOutlet.title = NSLocalizedString(@"Done", @"Done"); 
    self.editOutlet.style = UIBarButtonItemStyleDone; 
    [self.tableViewOutlet setEditing:YES animated:YES]; 

}else { 
    self.editOutlet.title = NSLocalizedString(@"Edit", @"Edit"); 
    self.editOutlet.style = UIBarButtonItemStylePlain; 
    [self.tableViewOutlet setEditing:NO animated:YES]; 

    } 
} 
0

si può provare

[self setValue:viewController.navigationItem forKey:@"_navigationItem"]; 
[self.navigationController setNavigationBarHidden:YES animated:NO]; 
[self.navigationController setNavigationBarHidden:NO animated:NO]; 
Problemi correlati