Déterminer si un tableview cellule est visible
Est-il un moyen de savoir si un tableview cellule est actuellement visible?
J'ai un tableview dont la première cellule(0) est un uisearchbar.
Si la recherche n'est pas actif, puis masquer la cellule 0 par le biais d'un décalage.
Lorsque la table a seulement quelques lignes, la ligne 0 est visible.
Comment faire pour déterminer si la ligne 0 est visible ou est le haut de la ligne?
Vous devez vous connecter pour publier un commentaire.
UITableView
a une méthode d'instance appeléeindexPathsForVisibleRows
qui sera de retour uneNSArray
deNSIndexPath
objets pour chaque ligne de la table qui sont actuellement visibles. Vous pouvez vérifier cette méthode avec n'importe quelle fréquence vous en avez besoin et vérifier la bonne ligne. Par exemple, sitableView
est une référence à votre table, voici une méthode qui vous dira si oui ou non la ligne 0 est sur l'écran:Parce que le
UITableView
méthode renvoie laNSIndexPath
, vous pouvez facilement étendre cette mesure à regarder pour les sections, ou une ligne/section combinaisons.C'est plus utile que la
visibleCells
méthode, qui renvoie un tableau de cellule de tableau d'objets. Cellule de tableau d'objets recyclés, ainsi dans de grands tableaux qu'il aura finalement pas de corrélation simple retour à votre source de données.for
instruction de boucle par tous les indices dans le tableau, si vous êtes à la recherche pour la ligne d'indice 0 de la section 0, il est probablement plus facile d'écrire directementBOOL isRowZeroVisible = [[tableView indexPathsForVisibleRows] containsObject:[NSIndexPath indexPathWithRow:0 inSection:0]];
indexPathsForVisibleRows
que la mise en page est en coursVérification de la tableview cellule est visible ou non utiliser ce code de ligne
ici newIndexPath est IndexPath de la vérification de la cellule.....
Swift 3.0
- Je l'utiliser dans Swift 3.0
Swift Version:
Une autre solution (qui peut également être utilisé pour vérifier si une ligne est entièrement visible) serait de vérifier si le cadre de la
row
est à l'intérieur du visible rect de latableview
.Dans le code suivant,
ip
représente laNSIndexPath
:Également à l'aide de
cellForRowAtIndexPath:
devrait fonctionner, puisqu'elle retourne unnil
objet si la ligne n'est pas visible:IOS 4:
Note que "Peu visible" est "visible". Aussi, dans viewWillAppear, vous pourriez avoir de faux positifs de
indexPathsForVisibleRows
que la mise en page est en cours, et si vous êtes à la recherche à la dernière ligne, même en l'appelantlayoutIfNeeded()
ne vous aidera pas pour les tables. Vous aurez envie de vérifier les choses dans/aprèsviewDidAppear
.Cette swift 3.1 code pour désactiver de défilement si la dernière ligne est entièrement visible. L'appeler dans/après viewDidAppear.