2010-04-03 12 views
7

Estoy tratando de configurar una lista de elementos que se pueden editar. Tengo una vista principal, con una UINavigationBar en la parte superior y una UITableView directamente debajo de ella. Me gustaría que mi botón "editar" se convierta en un botón "listo" al hacer clic, pero no puedo encontrar la manera de hacerlo.Cómo cambiar un UIBarButtonItem en un UINavigationBar

Si pudiera hacerlo en el código (no en el constructor de interfaz), podría simplemente reemplazarlo, pero ni siquiera puedo hacerlo. He visto un código usando [self.navigationItem], pero en mi caso self es un UIView.

También me resulta un poco extraño usar una UINavigationBar cuando no quiero navegación (esta es una página solamente), pero quiero una barra de herramientas con un título y un botón, así que no creo realmente Tener elección.

Respuesta

15

Creo un botón que puede cambiar de Edición a Hecho. Es un consejo del libro de desarrollo de más iPhone.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

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

Y el método 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]; 
} 

Entonces no es necesario reemplazar cualquiera de ellos.

+0

Ah, sí, que se ve bien. Sin embargo, no creo que obtengas ese bonito estilo "Hecho" de esa manera, donde el botón tiene un color ligeramente diferente. –

+0

Ahora con el cambio de estilo, el botón HECHO de este código es exactamente igual a UIBarButtonSystemItemDone. – wal

0

¡Lo tengo! Parece que puede acceder al UINavigationItem utilizando la propiedad topItem. ¡Solo tenía que leer los documentos, como siempre!

4

Cuando utiliza self.editButtonItem, no necesita cambiar el estilo y el texto del botón, se realiza automáticamente. Intente eliminar ese código, todavía funcionará :)

2

configure el botón de navegación en IB con lo siguiente vinculado en IB y cree una salida llamada editOutlet y una acción llamada editToggle en su archivo de encabezado y su método es tan fácil como esto:

-(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

se puede probar

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