2010-09-21 15 views
12

¿Alguna idea sobre cómo restablecer un UITableView?eliminar las subvistas de contentView de UITableViewCell (reiniciar UITableView)

Quiero mostrar un nuevo conjunto de datos con solo presionar un botón y también eliminar todas las subvistas de la celda contentView y actualizarlas con un nuevo conjunto de subvistas. Intenté [tableView reloadData] pero los datos se actualizaron pero las subvistas agregadas al contentView de las células previamente persistieron.

Respuesta

36

Mejor aún, cuando se crea la célula:

#define MY_CUSTOM_TAG 1234 
mySubview.tag = MY_CUSTOM_TAG; 
[cell.contentView addSubview:mySubview] ; 

Y más tarde, cuando se necesita para eliminarlo:

[[cell.contentView viewWithTag:MY_CUSTOM_TAG]removeFromSuperview] ; 
+0

este es un trabajo muy inteligente;) – Abolfoooud

+0

Se está aplicando para la última celda de vista de tabla y volver a cargar la vista secundaria. todas las demás subvistas en otras celdas no son refrescantes –

+0

'cell.contentView.viewWithTag (MY_CUSTOM_TAG) ?. removeFromSuperview()' –

24

Tengo la respuesta :)

if ([cell.contentView subviews]) { 
    for (UIView *subview in [cell.contentView subviews]) { 
     [subview removeFromSuperview]; 
    } 
} 

Esta pieza de código comprobará si la vista del contenido de la celda tiene ningún subvistas.
Si los hay, los elimina ya que el ciclo for itera!

+0

solución decente ... 1 – Rumin

+0

Se está eliminando sólo desde la celda de visualización última mesa, no para todas las celdas de la vista de tabla –

+0

solución perfecta! –

16

En lugar de iteración a través de todas las subvistas (a sí mismo) para eliminar ellos, simplemente puede hacer esto,

[[scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
+6

Eso es en realidad iterar a través de las subvistas para eliminarlas. ;) –

+0

He editado mi respuesta :) – EmptyStack

2

Si desea eliminar todas las subvistas de una UITableViewCell, puede hacernos e este código:

NSArray* subviews = [cell.contentView subviews]; 
for (UIView* subview in subviews) { 
    [subview removeFromSuperview]; 
} 

Utilizando el código de @leftspin

1

Sé que esta pregunta es viejo, pero he encontrado un problema con la solución, si se quita una vista secundaria de una célula prototipo, esta vista se eliminará de todas las celdas reutilizadas, esto creará un puntero nulo en la celda siguiente que se reutilizará.

Si subclase UITableViewCell y eliminar la subvista a partir de ahí, tendrá que hacer esta verificación en primer lugar:

if (mySubView != nil) { 
     mySubView.removeFromSuperview() 
    } 

Esto también funciona dentro de su cellForRow al método indexPath

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCustomCell 

    if (cell.mySubView != nil) { 
     cell.mySubView.removeFromSuperview() 
    } 
    return cell 
} 

Whit este evitas el puntero nulo, el código es rápido 3. Espero que esto ayude a alguien. :)

0

para SWIFT 3,1

 let theSubviews: Array = (cell?.contentView.subviews)! 
     for view in theSubviews 
     { 
      view.removeFromSuperview() 
     } 
Cuestiones relacionadas