40 votes

D'où vient le indexPath de dequeueReusableCellWithIdentifier:forIndexPath: habituez-vous?

La documentation d'Apple en dit - indexPath paramètre:

Le chemin d'index indiquant l'emplacement de la cellule. La source de données reçoit cette information lorsqu'il est demandé à la cellule et doit simplement transmettre. Cette méthode utilise le chemin d'index pour effectuer une configuration supplémentaire basé sur la cellule de la position dans le tableau.

Mais register(Class|Nib):forCellReuseIdentifier: seulement spécifie la réutilisation de l'identificateur à utiliser, pas de la section ou un ensemble de chemins d'accès index.

J'ai pensé que peut - UITableViewCell avaient une certaine façon d'obtenir ses mains sur le chemin d'index, de sorte qu'il pourrait dire, arrondir ses angles, si dans la première ligne d'un article, mais je ne suis pas le voir. Au moment de la création, tout c'est son style et la réutilisation de l'identificateur (initWithStyle:reuseIdentifier:); à la réutilisation de temps, tout ce qu'il dit est - prepareForReuse.

Voyant que le vieux - dequeueReusableCellWithIdentifier: est toujours pris en charge, de quelle sorte d'indice basé sur le chemin de configuration pourrait-il éventuellement être en train de faire, si elle ne peut pas compter sur d'avoir la chance de le faire, de toute façon?

J'ai vérifié l'Affichage de la Table Guide de Programmation, mais il n'a pas été mis à jour depuis iOS 5.

40voto

matt Points 60113

La différence la plus importante entre dequeueReusableCellWithIdentifier: et dequeueReusableCellWithIdentifier:indexPath: , c'est qu'ils sont les différentes méthodes! Ainsi, ils peuvent se comporter différemment, et ils le font. Cela n'a rien à voir avec la indexPath, vraiment; nous avons juste besoin d'un moyen de les distinguer.

La Nouvelle Façon

En particulier, si vous appelez dequeueReusableCellWithIdentifier:indexPath:, ce qui est un signe que vous êtes en utilisant le nouveau iOS 6 s'inscrire et retirer le système. Donc, si vous avez omis de s'inscrire dans cet identifiant, vous obtiendrez un joli crash et un message de journal en expliquant le problème. Cette méthode ne sera jamais nulle; elle renvoie toujours une cellule, soit par la création d'une nouvelle ou en réutilisant un.

L'Ancienne

D'autre part, pure et simple, dequeueReusableCellWithIdentifier: est vieux et doit être compatible. Si vous n'avez pas enregistré cet identifiant, il ne se plaint pas: il va juste retourner nil, vous laissant au sec. Vous devez créer vous-même cellule, comme dans les mauvais jours.

EDIT: Mais voir aussi la réponse de @svena! La nouvelle façon (avec indexPath:) a un deuxième avantage que je ne connaissais pas: la cellule est correctement dimensionné au moment où il est retourné à vous.

36voto

svena Points 2206

Selon la WWDC 2012 Session De 200 nouveautés Dans Cocoa Touch,

si vous utilisez -dequeueReusableCellWithIdentifier:forIndexPath: à retirer votre cellule, il sera de la bonne taille et vous serez en mesure de faire de mise en page à l'intérieur de votre cellule contentView.

C'est presque une citation de Chris Parker, UIKit Ingénieur.

2voto

idz Points 6497

Je crois qu'il est utilisé pour appeler l' tableView:heightForRowAtIndexPath: méthode, s'il en existe, permettant à la cellule pour être correctement dimensionné.

-2voto

Jorge Ortiz Points 159

Comme je le comprends, il est seulement utilisé pour le réglage de la position initiale de la cellule. Cela est particulièrement important lors d'une animation à jour.

L'idée est d'avoir le chemin d'index et de le comparer avec ceux visibles sur la vue de la table. Puis décider de créer au-dessus de la table ou en dessous d'elle.

-2voto

CaptainRedmuff Points 2870

J'ai toujours pensé que UIKit permettrait d'arrondir les angles du haut et du bas des cellules regroupés dans un tableau lorsque l' UITableViewDelegate méthode:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

est appelé. Cependant, sachant que le chemin d'index n'est pas grande utilité à moins que la cellule sait aussi combien de lignes sont dans la même section de sorte qu'il peut travailler si c'est la dernière cellule ou pas.

Je suppose que l'ajout de l'indice chemin d'accès à la méthode de dequeueReusableCellWithIdentifier: est d'améliorer la performance peut-être que @jrturton proposé avec différents réutilisation des piscines ou simplement à déterminer la position d'une cellule regroupées dans les sections.

Aussi loin que je me souvienne de la WWDC vidéos, il y avait quelques méthodes supplémentaires ajoutés dans iOS 6 à l'appui de la réorganisation, de l'insertion et de la suppression de cellules, donc peut-être que cela vient aussi de facteur ici?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X