Compruebe si una UITableViewCell específica está visible en una UITableView

Tengo un UITableView y algo UITableViewCells que he creado manualmente a través del interfaz del generador. He asignado a cada celda un outlet, y los estoy conectando al UITableView en el objeto CellForRowAtIndexPath método. En este método, utilizo el switch(case) método para hacer que las células específicas aparezcan en el UITableView, depende del caso.

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

Gracias :)

preguntado el 08 de noviembre de 11 a las 15:11

5 Respuestas

Tenga en cuenta que también puede utilizar indexPathsForVisibleRows de 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 tiene indexPath (y no necesita la celda real), podría ser más barato.

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

Respondido 16 Abr '12, 16:04

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

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

Esto supone que tiene una variable de instancia separada que contiene la celda que le interesa, creo que lo hace a partir de la pregunta, pero no está claro.

respondido 08 nov., 11:19

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

Ésta es la respuesta correcta a la pregunta original, si hay una celda visible. Gracias por la respuesta limpia y simple. - Martin Schultz

Puede utilizar el método UITableView:

[tableView indexPathForCell:aCell];

Si la celda no existe en tableView, devolverá nil. De lo contrario, obtendrá NSIndexPath de la celda.

respondido 08 nov., 11:19

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
}

Respondido el 01 de junio de 17 a las 19:06

Desde iOS 7, indexPathForVisibleRows contendrá una fila que está debajo de la barra de navegación translúcida, por lo que ahora debe hacer esto:

[self.tableView indexPathsForRowsInRect:self.tableView.safeAreaLayoutGuide.layoutFrame]

Respondido 26 ago 19, 15:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.