SDK iOS: Comment faire pour obtenir une cellule dans un tableau de la vue qui n'est pas visible?
Comment puis-je obtenir la cellule pour une indexPath qui n'est pas actuellement visible dans le tableau? (cellule est hors de portée),
Code pour l'obtention de mon cellulaire:
NSString *name = [[(ELCTextfieldCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] rightTextField] text];
-cellForRowAtIndexPath...
retourne nil
parce que la cellule à l'indexPath est hors de portée. Alors, comment puis-je obtenir la bonne cellule et non nul?
Veuillez fournir plus d'informations et le code.
OK, j'ai un groupés vue de la table, où quelques cellules ont textfields et à la fin il y a des cellules qui représente les boutons. Maintenant j'ai le problème que si je suis à la fin de l'affichage de la table de mon premier couple de cellules est maintenant hors de portée, mais si je clique sur une cellule qui représente un bouton, j'ai besoin de l'information fournie au début. Maintenant, j'ai essayé: [[(ELCTextfieldCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] rightTextField] texte] mais cellForRowAtIndexPath:... retourne nil, car la cellule est hors de portée. Alors, comment puis-je obtenir la bonne cellule (et non nul)?
La réponse à votre question est que nacho4d dit - ne pas utiliser les cellules pour obtenir de l'information, l'obtenir à partir de votre sous-jacente de la source de données. L'ensemble de la réponse est que vous semblez être à l'aide d'une vue de la table de jeter un défilement de l'INTERFACE utilisateur au lieu d'utiliser une vue dans une barre de défilement.
OK, j'ai un groupés vue de la table, où quelques cellules ont textfields et à la fin il y a des cellules qui représente les boutons. Maintenant j'ai le problème que si je suis à la fin de l'affichage de la table de mon premier couple de cellules est maintenant hors de portée, mais si je clique sur une cellule qui représente un bouton, j'ai besoin de l'information fournie au début. Maintenant, j'ai essayé: [[(ELCTextfieldCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] rightTextField] texte] mais cellForRowAtIndexPath:... retourne nil, car la cellule est hors de portée. Alors, comment puis-je obtenir la bonne cellule (et non nul)?
La réponse à votre question est que nacho4d dit - ne pas utiliser les cellules pour obtenir de l'information, l'obtenir à partir de votre sous-jacente de la source de données. L'ensemble de la réponse est que vous semblez être à l'aide d'une vue de la table de jeter un défilement de l'INTERFACE utilisateur au lieu d'utiliser une vue dans une barre de défilement.
OriginalL'auteur Daniel Mühlbachler | 2011-06-26
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas la façon dont il fonctionne. Vous devez saisir et de stocker les informations dès qu'il est entré ou modifié. Il peut facilement obtenir hors de portée et vous ne pouvez pas garantir votre cellule de vie assez longue. Eh bien, techniquement, vous pouvez accrocher à elle (et toujours le même cellule pour le même chemin d'index), mais je n'avais question de conception.
Je pense que la seule approche raisonnable consiste à enregistrer les changements dès qu'ils se produisent. Vous pouvez avoir un moment difficile de récupérer les données, plus tard, et la cellule peut-être même déjà "morte" et libéré.
OriginalL'auteur Eiko
La
UITableView
conserve uniquement les cellules visibles. Si vous avez besoin d'un qui n'est pas visible, vous devez appeler letableView:cellForRowAtIndexPath:
de laUITableView
dataSource
. Donc, si l'auto est une classe qui est ledataSource
:En général, qui ne conservent pas les données qui ont été saisies dans les cellules. Ne fonctionne que si elle est encore dans le cache.
il fonctionne...!!! merci beaucoup. vous avez enregistré beaucoup d'heures de mine.
OriginalL'auteur Raphael Petegrosso
UITableViewCells sont faites pour être réutilisés/recyclés d'une manière que les utilisateurs n'auront pas besoin de créer des cellules de plus que le nombre de ceux qui sont visibles.
Vous n'avez généralement pas besoin d'accéder à une cellule qui n'est pas visible. Il devrait être suffisant, vous accéder à votre source de données et obtenir/définir les données correspondantes. Sont des cellules pour montrer certains de l'état de la source de données. Pas la source de données elle-même 🙂
Edit:
Vous avez dit que vous avez besoin de quelques informations (texte) d'une cellule en haut, à droite? Si vous utilisez
cellForRowAtIndexPath:
méthode de la cellule sera recréé, mais vous ne pourriez pas obtenir le texte qui est dans le champs. La raison? sans doute parce que vous n'avez pas l'enregistrer quelque part d'autre. Si vous ne l'enregistrez, puis d'accéder directement au lieu de passer par la cellule.OriginalL'auteur nacho4d
De continuer à @Raphael réponse, Voici le (travail) swift 3 solution:
UITableViewCell cell = self.tableView(self.tableView, cellForRowAt: indexPath)
OriginalL'auteur Yonatan Goriachnick
Sont les informations à remplir votre tableau à venir à partir d'un tableau? Pourriez-vous ne pas tirer directement du tableau à l'indice 0, de même que votre cellForRowAtIndexPath ne serait sans doute de récupérer et remplir la cellule lorsqu'elle est affichée?
OriginalL'auteur Dean Davids