2012-03-26 11 views
8

Estoy usando xcode 4.2 con el guión gráfico para crear una aplicación para iPhone.Agregar celda a la parte inferior de UITableView en iOS

Cuando presiono el botón Editar en la esquina superior derecha me gustaría tener las opciones para eliminar las filas existentes y ver la celda extra (con el icono verde '+') en la parte superior que me permitiría agregar una nueva célula

tengo una matriz que está siendo poblada en el método viewDidLoad usando CoreData

He activado el botón de configuración

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

y puesto en práctica el método

- (void)tableView:(UITableView *)tableView commitEditingStyle: 
      (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath: 
        (NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // removing a cell from my array and db here... 
    } 
    else if (editingStyle == UITableViewCellEditingStyleInsert) { 
     // adding a cell to my array and db here... 
    } 
} 

me cuenta que necesito para agregar la celda en algún punto que luego pueda editar, pero no está claro dónde y no puedo encontrar una explicación en Internet.

Respuesta

18

Ok, la idea básica es que cuando se haga clic en el botón editar, mostraremos los controles de eliminación al lado de cada fila y agregaremos una nueva fila con el control de agregar para que los usuarios puedan hacer clic ? En primer lugar, dado que ya tiene la configuración del botón de edición, le pedimos a nuestra tabla que en el modo de edición deberíamos mostrar una fila adicional. Hacemos eso en nuestra tableView:numberOfRowsInSection:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return self.editing ? a_recs.count + 1 : a_recs.count; 
} 

a_recs aquí es la matriz he configurar para almacenar nuestros archivos por lo que tendrá que cambiar eso con su propia matriz. Lo siguiente que decimos a nuestro tableView:cellForRowAtIndexPath: qué hacer con la fila adicional:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *CellIdentifier = @"Cell"; 
    BOOL b_addCell = (indexPath.row == a_recs.count); 
    if (b_addCell) // set identifier for add row 
     CellIdentifier = @"AddCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     if (!b_addCell) { 
      cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
     } 
    } 

    if (b_addCell) 
     cell.textLabel.text = @"Add ..."; 
    else 
     cell.textLabel.text = [a_recs objectAtIndex:indexPath.row]; 

    return cell; 
} 

También queremos instruir a nuestra mesa que para esa fila que queremos añadir el icono de añadir:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row == a_recs.count) 
     return UITableViewCellEditingStyleInsert; 
    else 
     return UITableViewCellEditingStyleDelete; 
} 

mantequilla. Ahora el super salsa Kung fu secreto que mantiene todo junto con los palillos:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 
    [self.tableView setEditing:editing animated:animated]; 
    if(editing) { 
     [self.tableView beginUpdates]; 
     [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; 
     [self.tableView endUpdates];   
    } else { 
     [self.tableView beginUpdates]; 
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; 
     [self.tableView endUpdates]; 
     // place here anything else to do when the done button is clicked 

    } 
} 

Buena suerte y buen provecho!

+0

:) =) no hay problema! – ragamufin

+0

Al utilizar este método, observo que la fila de inserción que estamos agregando y quitando muestra el ícono de selección azul en el lado derecho durante un breve momento al quitarlo. Tiene que ver con sacar la mesa del modo edición antes de quitar la fila. Intenté mover la llamada 'beginUpdates' por encima de la llamada tableView' setEditing', pero luego aparece el icono azul cuando se agrega la fila, en lugar de eliminarla. ¿Alguna idea de cómo evitar ese icono de selección azul? – Ryan

+0

Parece que accessoryType se está estableciendo en algún lugar o en caché en la cola de tableView. Intente configurarlo explícitamente en UITableViewCellAccessoryNone cuando agregue una celda. – ragamufin

4

This tutorial es digno de lectura y debería ayudarlo. Se muestra cómo configurar un 'Añadir nueva fila' fila UITableView en la parte inferior de un UITableView, pero usted debería ser capaz de hacer esto aparece en la parte superior de su UITableView dentro de su aplicación de:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

por ejemplo,

if(self.editing && indexPath.row == 1) 
{ 
    cell.text = @"Insert new row"; 
    ... 

Hope this helps!

Cuestiones relacionadas