web-dev-qa-db-fra.com

Vérifier si un UITableViewCell spécifique est visible dans un UITableView

J'ai un UITableView et un certain UITableViewCells que j'ai créés manuellement via le Interface Builder . J'ai assigné une outlet à chaque cellule et je les connecte à la UITableView dans la méthode CellForRowAtIndexPath. Dans cette méthode, j’utilise la méthode switch(case) pour faire apparaître des cellules spécifiques dans la UITableView, selon le cas.

Maintenant, je veux trouver une cellule spécifique et vérifier s'il existe dans la variable UITableView. J'utilise la méthode: UITableView.visibleCells pour obtenir un tableau des cellules dans la vue tableau. Ma question est - comment puis-je vérifier si une cellule spécifique existe dans le tableau? puis-je utiliser le point de vente que je lui ai assigné? - (La meilleure solution), OU puis-je utiliser un identifiant et comment?

Merci :)

24
ozking

Notez que vous pouvez également utiliser indexPathsForVisibleRows de cette façon:

    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 vous avez le chemin indexPath (et n'avez pas besoin de la cellule réelle), il pourrait être moins cher .

PS: _people est la NSArray utilisée comme serveur principal dans ce cas.

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

Cela suppose que vous avez une variable d'instance distincte contenant la cellule qui vous intéresse, je pense que vous le faites à partir de la question, mais ce n'est pas clair. 

17
jrturton

Vous pouvez utiliser la méthode UITableView:

[tableView indexPathForCell:aCell];

Si la cellule n'existe pas dans la table, elle retournera nil. Sinon, vous obtiendrez le NSIndexPath de la cellule.

11
Sorig

Vous pouvez le faire dans Swift 3 pour vérifier si la UITableViewCell est visible:

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

if tableView.visibleCells.contains(cell) {
    // the cell is visible
}
1
pableiros