2011-07-21 10 views
5

Estoy tratando de hacer mi UITableView editable para que pueda mover las celdas. En este momento, cuando hago clic en el botón editar, solo me permite eliminar pero no reorganizar.¿Cómo hacer que UITableView se pueda reorganizar?

Los métodos que tengo son:

Code: 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return YES; 
} 

- (void)setEditing:(BOOL)editing animated:(BOOL)animate 
{ 
    [self.routineTableView setEditing: !self.routineTableView.editing animated:YES]; 

    if (self.routineTableView.editing) 
     [self.navigationItem.leftBarButtonItem setTitle:@"Done"]; 
    else 
     [self.navigationItem.leftBarButtonItem setTitle:@"Edit"]; 
} 

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 
     [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]]; 
     NSLog(@"fetched results : \n%@\n",[self.fetchedResultsController fetchedObjects]); 

     NSError *error = nil; 

     if (![managedObjectContext save:&error]) 
     { 
      // Handle the error. 
     } 
    } 

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return YES; 
} 

Respuesta

8

Con el fin de poner en práctica la reordenación de filas correctamente, la fuente de la tabla vista de datos debe implementar métodos como:

-(BOOL)tableView:(UITableView *)tableView 
canMoveRowAtIndexPath:(NSIndexPath *)indexPath; 
-(void)tableView:(UITableView *)tableView 
moveRowAtIndexPath:(NSIndexPath *)fromIndexPath 
     toIndexPath:(NSIndexPath *)toIndexPath; 

y su delegado podría implementar:

-(NSIndexPath *)tableView:(UITableView *)tableView 
targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath 
        toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath; 

También existe este page dándote ejemplos de código.

2

Tienes que leer el documentation. También puede obtener el código de muestra relacionado allí.

Cuando una vista de tabla entra en el modo de edición y cuando los usuarios arrastrar un control de reordenamiento , la vista de tabla envía una serie de mensajes a su fuente de datos y delegado, pero sólo si poner en práctica estos métodos. Estos métodos permiten que la fuente de datos y el delegado restrinjan si y dónde también se puede mover una fila para llevar a cabo la operación de movimiento real.

Cuestiones relacionadas