2011-03-19 18 views
11

Tengo una clase UIViewController, con un tableView. En viewDidLoad:UITableView en modo de edición - El botón 'Editar' no cambia el estado

UIBarButtonItem *editIcon = [[[UIBarButtonItem alloc] 
initWithBarButtonSystemItem: UIBarButtonSystemItemEdit 
        target:self 
        action:@selector(toggleEditMode)] autorelease]; 

In te método 'toggleEditMode':

-(void)toggleEditMode{ 
if(self.theTable.editing) { 
    [theTable setEditing:NO animated:YES]; 
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain]; 
} 
else if ([callsArray count]!=0){ 
    [theTable setEditing:YES animated:YES]; 
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone]; 
} 

}

El problema es que el botón Editar no cambia hacer 'Hecho'. ¿Qué falta? Tengo todos los métodos declarados:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

Gracias,

RL

Respuesta

22

Por qué no usar -editButtonItem de UIViewController directamente? Y anula el método -setEditing:animated:.

// Assign the system's edit button, 
// it will change style when different edit status. 
self.navigationItem.rightBarButtonItem = self.editButtonItem; 

// The editButtonItem will invoke this method. 
- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 

    if (editing) { 
     // Execute tasks for editing status 
    } else { 
     // Execute tasks for non-editing status. 
    } 
} 
+0

Perfecto. Acabo de cambiar if (editing) to if (theTable.editing) porque de tableView es un IBOutlet. La clase no hereda de UITableViewController. Gracias, RL –

+0

De nada. :) – AechoLiu

+1

Aunque esta es una vieja pregunta, me ayudó a darme cuenta de que olvidé el [super setEditing: edición animada: animada]; línea, que es por lo que el mío no estaba funcionando. ;) Gracias por publicar esto. – DataJock

0

¿Estás seguro callsArray no está vacío?

Coloque un punto de interrupción dentro de toggleEditMode y vea qué pasa allí.

Editar

Ok, después de entender su pregunta, echar un vistazo a este thread

+0

sí, estoy seguro. La tabla ingresa en el modo Editar y funciona cuando elimino una fila. Ese no es el problema. El problema es que el botón 'Editar' no cambia su nombre hace 'DONE' cuando la clase es una clase UITableViewController. En cambio, mi clase es un UIViewController con una tabla. –

2

Es porque sólo se está configurando el estilo del botón (no su texto ) cuando cambias de modo. Es necesario hacer esto (o equivalente):

-(void)toggleEditMode{ 
    self.navigationItem.rightBarButtonItem.title = self.tableView.editing ? @"Done" : @"Edit"; 
+0

¿Por qué no funciona como cuando una clase hereda de UITableViewController? ¿No puedo asignar el botón a la mesa y trabajar así? –

Cuestiones relacionadas