Me gustaría que mi UITableView se comporte como la tabla en el editor de contactos, es decir, el usuario debería presionar Editar y una fila de "agregar nueva categoría" debería aparecer en la parte inferior de cada sección.Usar filas de inserción en una UITableView
Estoy usando el siguiente código para hacer esto, pero el problema es que no hay una transición suave como la que hay en Contactos. En cambio, la nueva fila aparece de repente. ¿Cómo puedo obtener la animación?
Además, ¿cómo respondo a los clics en la fila "agregar nueva categoría"? La fila no se puede hacer clic en mi implementación actual.
¿Debo volver a cargar los datos cuando el usuario comienza a editarlos? Estoy haciendo esto porque de lo contrario las filas de inserción nunca se dibujan.
Gracias.
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:animated];
[tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)_tableView numberOfRowsInSection:(NSInteger)section {
// ...
if(self.tableView.editing)
return 1 + rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// .....
NSArray* items = ...;
if(indexPath.row >= [items count]) {
cell.textLabel.text = @"add new category";
}
// ...
return cell;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
NSArray* items = ...;
if(indexPath.row == [items count])
return UITableViewCellEditingStyleInsert;
return UITableViewCellEditingStyleDelete;
}
Esto era muy útil (junto con la respuesta, más adelante). Solo una inconsistencia menor: la comparación con el conteo de filas en 'tableView: cellForRowAtIndexPath:' usa '> =' mientras que la de 'tableView: editingStyleForRowAtIndexPath:' usa '=='. No es gran cosa, pero debería ser consistente entre ellos. '> =' cubriría cualquier doble adición accidental de la fila Insertar, mientras que '==' ayudaría lanzando una excepción por cualquier error de código que pudiera llevar a esa situación. –