2011-11-08 26 views
23

Tengo un UITableView y un poco de UITableViewCells que he creado manualmente a través del Interface Builder. He asignado a cada celda un outlet, y estoy conectándolas al UITableView en el método CellForRowAtIndexPath. En este método, utilizo el método switch(case) para hacer que las celdas específicas aparezcan en el UITableView, según el caso.Compruebe si un UITableViewCell específico es visible en una UITableView

Ahora, quiero encontrar una celda específica y verificar si existe dentro del UITableView. Uso el método: UITableView.visibleCells para obtener una matriz de celdas en la vista de tabla. Mi pregunta es: ¿cómo puedo verificar si existe una celda específica en la matriz? ¿Puedo usar el outlet que le he asignado de alguna manera? - (La mejor solución), O, ¿puedo usar un identificador y cómo?

Gracias :)

Respuesta

74

Tenga en cuenta que usted puede también utilizar indexPathsForVisibleRows esta manera:

NSUInteger index = [_people indexOfObject:person]; 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0]; 
    if ([self.tableView.indexPathsForVisibleRows containsObject:indexPath]) { 
     [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
          withRowAnimation:UITableViewRowAnimationFade]; 
    } 

Si usted tiene la indexPath (y no necesita la Cell real) podría ser más barato .

PS: _people es el NSArray utilizado como mi backend en este caso.

+3

Esta solución es mejor que la solución aceptada en la mayoría de los casos. – Envil

+0

¡Esto funciona perfecto! Gracias:) – Gaurav

11

Usted puede utilizar el método UITableView:

[tableView indexPathForCell:aCell]; 

Si la célula no existe en el tableView volverá nula. De lo contrario, obtendrá NSIndexPath de la celda.

+1

Eso es trabajo, gracias :) – ozking

+4

esto no funciona cuando la reutilización de las células –

+0

Gracias, funciona +1 – iLearner

16
if ([tableView.visibleCells containsObject:myCell]) 
{ 
    // Do your thing 
} 

Esto supone que tiene una variable de instancia independiente que contiene la celda que está interesado en, yo creo que sí a la pregunta, pero no está claro.

+0

Gracias, es otra forma de implementar la solución que Sorig me dio :) – ozking

+0

Esta es la respuesta correcta a la pregunta original, si una celda está visible. Gracias por la respuesta limpia y simple. –

0

Usted puede hacer esto en Swift 3 para comprobar si el UITableViewCell es visible:

let indexPathToVerify = IndexPath(row: 0, section: 0) 
let cell = tableView.cellForRow(at: indexPathToVerify) 

if tableView.visibleCells.contains(cell) { 
    // the cell is visible 
} 
de
Cuestiones relacionadas