iPad: Itérer sur chaque cellule dans un UITableView?
iPad: Itérer sur chaque cellule dans un UITableView?
- Sens de la question, vraiment: les Cellules sont mises en commun et réutilisées. En règle générale, si vous ne le voyez pas sur un écran, ça n'existe pas. Élaborer s'il vous plaît sur ce que vous essayez de faire.
- +1 pour le commentaire, pourquoi avez-vous besoin d'itérer sur les cellules? Habituellement, vous devez effectuer une itération sur les données sous-jacentes de la structure, vous remplir les cellules de. Si vous avez besoin d'accéder à l'cellules pour une raison quelconque, puis dans
cellForRowAtIndexPath:
vous pouvez définir uncell
propriété de vos données sous-jacentes de la structure à point pour l'initialisation de la cellule. Assurez-vous que c'est un@property (assign)
bien, pas unretain
, puisque vous ne voulez pas de garder toutes les cellules de la mémoire pour le plaisir de les réutiliser. - Ce n'est pas vraiment de sens; la UITableView existe en tant que représentation visuelle de certains de la sauvegarde de données. Et la banque de données existe ou non un sous-ensemble particulier de ses données est actuellement à l'écran. Afin de réitérer les cellules est comparable à l'interrogation de ce qui est dans le magasin, une ligne à la fois.
- Il est dénuée de sens. Si vous êtes à l'interrogation de l'interface graphique de la table alors votre architecture est mal. Vous n'avez jamais besoin de frotter la table sur le GUI, puisque toutes les données existent dans le magasin de données. La table est MVC et toutes les données contenues dans la cellule est dans le magasin de données basé sur ce modèle. C'est une question de ne pas comprendre comment MVC œuvres.
- Je suis d'accord avec Nick Turner. N'essayez pas de ce que vous décrivez (avec l'exception possible que vous avez une petite table, et défini les cellules comme n'étant pas réutilisable). Le moyen recommandé d'utiliser tableviews est de maintenir un état dans un autre modèle. En tant qu'utilisateur apporte des modifications, mise à jour de ce modèle avec les modifications, par l'ajout d'un gestionnaire pour chaque champ
editDidEnd
ou une méthode similaire. Puis, quand "Fait", vous êtes l'examen personnalisé de votre modèle de données, les champs affichés ne sont pas nécessaires. - Pas exactement. La vue de la table est une représentation visuelle de certains sous-ensemble de la mémoire de sauvegarde. Il n'y a aucune garantie que c'est une représentation complète. (eh bien, vous pouvez vous assurer que tous sont générés lors de l'initialisation, que les cellules ne sont jamais réutilisés, et de le garder dans votre tableau personnalisé, comme iOS en fait la demande. Je l'ai fait. Je ne pense pas que je le ferais de nouveau - c'est difficile d'être certain que vous n'avez pas omis quelques détails, et de créer un problème qui ne se produit que dans certaines circonstances, sur certains appareils. Comment pouvez-vous garantir entièrement testé? Je vous le conseille.)
Vous devez vous connecter pour publier un commentaire.
Pour itérer sur chaque cellule visible dans un UITableView:
(modifié pour mieux répondre et j'espère que ce n'est indexée avec plus de précision pour les résultats de la recherche avec l'intention de sauver les autres plus de temps dans le futur)
(Cela s'appuie sur aroths réponse.)
J'aime à la définir comme une catégorie à
UITableView
il est donc disponible partout.(Comme mentionné à quelques reprises, vous devez être sûr que vous vraiment souhaitez effectuer une itération sur les cellules elles-mêmes. Par exemple: j'utilise cette fonction pour effacer les
UITableViewAccessoryCheckmark
's de toutes les cellules avant de le mettre à l'utilisateur cellule sélectionnée. Une bonne règle de base est de faire uniquement si la source de données méthodes ne peuvent pas faire ce que vous avez besoin.)Définir comme ceci:
Appeler comme ceci:
Il serait de bon ton de typedef le bloc, trop.
En supposant une variable
myTableView
existe et de son délégué et de la source de données sont:NSIndexPath
variable locale. Vérifier indexPath n'est pas celui qui est passé dans votre tableview de la source de données la fonction ou quelque chose comme ça.Même plus simple et plus élégante:
Mais évidemment, il ne convient pas à toutes les situations.
Swift 4:
par steve
Parcourir toutes les UITableCells donné une section id
Ce que je itération sur toutes les tables de vue cellules, même pas ceux qui sont visibles , vérifier ma réponse ici :
https://stackoverflow.com/a/32626614/2715840
Astuce : code Swift.