UITableView delete section – header stays visible

Después de usar [UITableView deleteSections:withRowAnimation:] en una sección que está fuera de la vista, el encabezado de la sección permanece visible.

En esta image, vemos la parte visible de la vista de tabla

introduzca la descripción de la imagen aquí

En la siguiente image, vemos toda la vista de tabla: AISLE 2 está oculta hasta que el usuario se desplaza hacia abajo, contiene solo una fila:

introduzca la descripción de la imagen aquí

Cuando me desploop hacia abajo y elimino la última fila, el encabezado de la sección AISLE 2 permanece visible, aunque usé deleteSections . si borro una fila de AISLE 1, el encabezado de la sección permanece en el mismo lugar, y al desplazarme hacia abajo todavía puedo verlo.

Además, al tratar de desplazarse hacia abajo para que el encabezado AISLE 2 esté en la vista, la interfaz de usuario actúa como AISLE2 NO forma parte de la vista de tabla, e inmediatamente me desplaza hacia atrás. Lo que significa: esta es una vista de basura que obviamente no es parte de la tabla, ya que la eliminé. por alguna razón, iOS no elimina esta vista, pero la desasocia de la tabla.

¿Algunas ideas?

Intente [tableview reload] con hacer numberofsections como 1.

¿De dónde provienen tus datos y cómo sabes cuántas secciones hay al comienzo? Creo que su problema puede resolverse fácilmente explicando esto.

Parece que puede tener una nsmutablearray multidimensional donde cada índice es un pasillo y cada object contiene los productos para esa isla. ¿O puede tener una matriz diferente para cada pasillo?

Cuando elimina una celda, simplemente verifique cuántas celdas quedan y llame a [self.tableView reloadData];

Para el ejemplo (hipotético);

si tiene matrices de sus pasillos:

 NSMutableArray *aisleOne = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil]; NSMutableArray *aisleTwo = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil]; NSMutableArray *aisleThree = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil]; NSMutableArray *aisleFour = [[NSMutableArray alloc] initWithObjects:@"Product1", @"Product2", nil]; 

y los agrega a una matriz:

 NSMutableArray *aisleArray = [[NSMutableArray alloc] initWithObjects:aisleOne, aisleTwo, aisleThree, aisleFour, nil]; 

luego, llame a este código cuando elimine una celda. Eliminará todos los aisleArray vacíos del aisleArray (que debe definirse globalmente):

 NSMutableArray *tempArray = [[NSMutableArray alloc] initWithArray:aisleArray]; for (int i=0; i<[tempArray count]; i++) { if ([[tempArray objectAtIndex:i] count] == 0) { [aisleArray removeObjectAtIndex:i]; } } [self.tableView reloadData]; 

Para que esto funcione, estos dos methods deberían ser:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [aisleArray count]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [[aisleArray objectAtIndex:section] count]; } 

(no probado)

Simplemente obtenga la vista de tabla para esa sección y elimínela de su vista de supervisión y tableView no la gestiona.

 UIView *mysteriousView = [tableView headerViewForSection:indexPath.section]; [tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic]; [mysteriousView removeFromSuperview]; 

¡Espero que esto ayude!