Quand utiliser UICollectionView au lieu de UITableView?

92

J'ai trouvé que c'était UICollectionViewcomme une version mise à niveau de UITableViewintroduite dans iOS6, mais quand dois-je choisir à la UICollectionViewplace de UITableView?

Il y a encore des applications qui utilisent UITableView, si UICollectionViewquelque chose UITableViewpeut faire, pourquoi les gens utilisent- UITableViewils encore ? Y a-t-il une différence en ce qui concerne les performances?

Merci!

wz366
la source

Réponses:

75

Cela dépend des exigences. Le déroulement de l'application détermine le type d'interface utilisateur à intégrer dans l'application.

Les gens utilisent principalement UICollectionviewpour créer des types d'interfaces utilisateur avec plusieurs images affichées dans une grille. Cela aurait une logique complexe d'utilisation UITableView, mais avec UICollectionview, ce serait facile.

Lors de l'utilisation UICollectionview, vous n'avez pas besoin de définir des boutons avec des balises ou d'autres éléments en obtenant les valeurs des éléments sélectionnés. Vous pouvez simplement entrer -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathet entrer UITableViewDelegate:

`-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`

Vous obtenez la ligne sélectionnée au lieu de l'élément, donc pour créer une grille ou des éléments modifiés, il UICollectionviewest préférable d' utiliser .

Pour les détails de la liste de chaque élément, les gens l'utilisent UITableViewcar il affiche plus d'informations sur chaque élément.

Documents Apple:

Référence de classe UICollectionView

La classe UICollectionView gère une collection ordonnée d'éléments de données et les présente à l'aide de dispositions personnalisables. Les vues de collection fournissent la même fonction générale que les vues de table, sauf qu'une vue de collection peut prendre en charge plus que des mises en page à une seule colonne. Les vues de collection prennent en charge les mises en page personnalisables qui peuvent être utilisées pour implémenter des grilles à plusieurs colonnes, des mises en page en mosaïque, des mises en page circulaires et bien d'autres. Vous pouvez même modifier la mise en page d'une vue de collection de manière dynamique si vous le souhaitez.

Référence de classe UITableView

Une vue de tableau affiche une liste d'éléments dans une seule colonne. UITableView est une sous-classe de UIScrollView, qui permet aux utilisateurs de faire défiler la table, bien que UITableView autorise uniquement le défilement vertical. Les cellules comprenant les éléments individuels du tableau sont des objets UITableViewCell; UITableView utilise ces objets pour dessiner les lignes visibles de la table. Les cellules ont un contenu (titres et images) et peuvent avoir, près du bord droit, des vues accessoires. Les vues accessoires standard sont des indicateurs de divulgation ou des boutons de divulgation de détails; le premier conduit au niveau suivant dans une hiérarchie de données et le second conduit à une vue détaillée d'un élément sélectionné. Les vues accessoires peuvent également être des contrôles de structure, tels que des commutateurs et des curseurs, ou peuvent être des vues personnalisées. Les vues de tableau peuvent entrer dans un mode d'édition dans lequel les utilisateurs peuvent insérer, supprimer et réorganiser les lignes du tableau.

Nitin Gohel
la source
3
Je pense en termes d'extensibilité - La vue de la collection marque plus !!
thatzprem
Je me demande pourquoi on a jamais besoin d'utiliser tableview alors que collectionview peut répondre à tous les besoins sans complexité supplémentaire mais offre une flexibilité (si un client a besoin d'étendre la mise en page à plus d'une colonne, ce serait assez simple de le faire avec collectionview ). J'utilisais toujours des vues de table par défaut, mais maintenant je doute que cela ait du sens de passer aux vues de collection à la place. Est-ce que je manque quelque chose?
vir us
tout est basé sur l'exigence principale. La vue de collection introduit tardivement et jusque-là tous les développeurs utilisent la table pour créer une grille et ce genre de choses. mais maintenant, une vue de collection de jours est la plus populaire à utiliser pour créer une mise en page comme une vue de table. ainsi, je ne pense pas que ce soit une mauvaise idée d'utiliser collectionviews
Nitin Gohel
Merci pour ton explication.
ssowri1
47

Voici mes critères:

  • Si un UITableView peut le faire, utilisez-le

  • Si un UITableView a besoin de beaucoup de code pour le faire ou ne peut pas le faire du tout, utilisez UICollectionView.

Vous devez tenir compte des restrictions sur UITableView avant de prendre une décision: c'est une seule colonne. Et vous ne pouvez personnaliser que les cellules, mais pas les arrière-plans de section et autres. Donc, si vous avez une liste simple de choses sans fioritures supplémentaires - qui ressemble à une vue iOS standard de tourbière, en gros - alors utilisez UITableview. Si vous avez des encarts personnalisés ou une bordure autour de chaque section, utilisez UICollectionView.

En fait, j'envisage UICollectionView pour toutes choses simplement parce que c'est très cher lorsque vous commencez à développer votre vue sous forme de tableau, puis découvrez plus tard qu'il ne peut pas faire la seule chose dont vous avez besoin. Expérience de première main;)

Modifier après encore plus d'expérience avec les deux: ne tenez pas compte de ce dernier paragraphe. UICollectionView nécessite beaucoup de code standard pour le faire fonctionner comme un UITableView. Utilisez UICollectionView uniquement lorsque cela est vraiment nécessaire. ;)

n13
la source
3
Réponse parfaite que je cherchais! Cela devrait être voté davantage!
rak appdev
2
La divulgation de votre expérience personnelle et de vos recommandations est très utile!
aero
1
J'ai vraiment ri en lisant ceci, bien dit! UITableView est tout aussi personnalisable que n'importe quoi, sauf qu'il plantera si vous ajoutez des animations qui compensent la mise en file d'attente. Je recommanderais que votre réponse soit accompagnée du guide des animations, et quelques recherches pour savoir personnellement combien de vues internes existent afin que vous puissiez les actualiser, et le problème "Je ne peux pas rendre la ligne de séparation invisible" que vous trouverez finalement ne surprendra pas n'importe qui. Les vues cachées dans scrollView, UIButton et tableView annulent la plupart des personnalisations jusqu'à ce que vous sachiez qu'elles sont cachées dans les objets
Stephen J
33

Pour les listes simples et la navigation avant / arrière, utilisez UITableView.

Si vous avez besoin d'un degré élevé de personnalisation, utilisez UICollectionView.

D'une manière générale, dans le développement de logiciels, il est préférable de choisir l'approche qui représente «la chose la plus simple possible».

EDIT: À partir d'iOS 14, UICollectionViewpeut maintenant faire des listes et c'est maintenant l'approche recommandée. Consultez cette session de la WWDC20 pour plus d'informations et de détails sur la mise en œuvre: https://developer.apple.com/videos/play/wwdc2020/10026/

Andrew Ebling
la source
14

Selon mon point de vue, la principale différence entre collectionView et tableView est que

TABLEVIEW -> afficher la liste des éléments dans une seule colonne.

COLLECTION-VIEW -> afficher la liste des éléments dans plusieurs colonnes.

J'espère que cela vous aidera.

Muhammad Waqas Bhati
la source
11

Si vous choisissez UITableView pour iPhone, assurez-vous d'avoir d'abord considéré votre stratégie iPad. Si vous souhaitez une disposition spécifique à l'iPad, vous souhaiterez peut-être que cette disposition à une seule colonne devienne une grille.

BricoleurDev
la source
8

Bien que ce ne soit pas obligatoire, j'utilise toujours une vue de collection. De cette façon, je peux facilement adapter la présentation de mes collections à des résolutions différentes. Un avantage est qu'il est prêt à ajouter rapidement de nouveaux types de cellules lors de la refactorisation à l'avenir.

Je ne vois aucun intérêt aux tables vues. Il est très simple d'utiliser une vue de collection pour représenter une table. IMO.

Chris Van Buskirk
la source
4

Cela dépend totalement de la façon dont vos données doivent être affichées. Comme mentionné par beaucoup ci-dessus, si vous n'avez besoin que d'un seul ensemble de données et que ce n'est pas trop complexe, optez pour une UITableViewautre utilisation UICollectionView.

UICollectionView est convivial pour la personnalisation.

Si vous avez affaire à plusieurs hauteurs de cellule, optez pour UICollectionView.

briseur de pensée
la source
4

D'après mon expérience personnelle, les deux éléments ne devraient être comparés que vaguement.

Vue de tableau

Un TableView est un élément d'interface utilisateur conçu pour afficher des données dans un format de liste. Certaines fonctionnalités sont fournies en standard avec un UITableView, telles que:

  • Vue accessoire
  • Style de sélection de cellule
  • Modification du style (boutons Supprimer et modifier).

Les éléments ci-dessus améliorent la convivialité des données lors de l'affichage et de l'interaction dans un format de liste. Tels que la visualisation des e-mails.

CollectionView

Un CollectionView est un élément d'interface utilisateur conçu pour afficher du contenu à l'aide d'une mise en page personnalisée (généralement tout ce qui n'est pas une liste). CollectionViews améliore la fonctionnalité d'affichage des données dans des styles de mise en page entièrement sur mesure et modifie également dynamiquement les mises en page à la volée. Quelques exemples sont:

  • Listes horizontales
  • Galeries de photos
  • Vues miniatures
  • Carrousels
  • Cadrans
  • Disposer des éléments sur une carte
  • etc.

CollectionViews permet également des sélections multiples.

Conclusion

Comme vous pouvez le voir dans ce qui précède, les deux ont des cas d'utilisation complètement différents et sont conçus pour améliorer le développement et la convivialité de leurs propres ensembles de données spécifiques.

Si vous cherchez à afficher quoi que ce soit dans un style de liste avec les interactions suivantes: - Ajout - Suppression - Réorganisation Ensuite, un UITableView simplifiera ce processus en fournissant le support dès la sortie de la boîte.

Pour le reste, vous devez tirer parti des avantages de CollectionView car vous disposez de plus de flexibilité.

Matthew Cawley
la source
2

Les deux dépendent des exigences. Les vues de table prennent également en charge divers scénarios d'édition. Cette prise en charge n'a pas été implémentée dans les classes Collection View. Si vous effectuez une conversion à partir d'une vue de table qui repose sur ces méthodes, attendez-vous à faire un peu plus de travail dans la vue de collection. Les en-têtes de section de la vue de collection peuvent être placés n'importe où dans la vue. et UITableView n'ont pas besoin de définir des boutons avec des balises ou d'autres choses en obtenant les valeurs des éléments sélectionnés.

Bhumesh Purohit
la source
1

En pratique, tout le monde utilise UICollectionView que j'ai rencontré, alors qu'ils n'ont besoin que d'un UITableView. "C'est unidimensionnel. Il monte et descend. Pourquoi ajoutez-vous des méthodes de délégation inutiles pour la mise en page ET les données?". Une fois, j'ai passé 2 heures supplémentaires à aider une startup à découvrir pourquoi son UICollectionViewCell a été écrasé parce que le propriétaire, qui n'a pas lu le manuel Animations, ni HIG, ni le guide UICollectionView, a décidé de l'utiliser et d'ajouter des hauteurs et des animations variables. Inutile de dire qu'il s'est donné mal à la tête et a perdu beaucoup de temps sur un problème non critique qu'il aurait pu éviter en utilisant simplement une cellule de tableau, car il n'y a pas de délégué de mise en page supplémentaire + Nib.

Permettez-moi de clarifier les choses, je suis tout à fait pour UICollectionView lorsque vos données et votre affichage en ont besoin. Ils sont très puissants. Mais en pratique, la plupart des gens que j'ai vus les utilisent sur des listes.

Cela soulève un autre défaut. Ils sont également utilisés sur des listes courtes et constantes qui ne changeront jamais. Dans ce cas, créez simplement un Xib. Ou écrivez une vue personnalisée qui les empile. Pourquoi? Parce que vous n'avez pas besoin de la gestion de la mémoire pour 5 jeux d'étiquettes avec un bouton ou un interrupteur. S'ils peuvent changer, alors oui, utilisez une liste. Si vous voulez de la physique, UICollectionView fonctionne bien avec quelques effets sympas. Mais avez-vous vraiment besoin d'ajouter 5 méthodes déléguées et un système de mise en page pour 5 étiquettes qui ne bougeront jamais?

De plus, je n'oublie pas qu'iOS a maintenant une vue d'empilement native. Je ne peux jamais le faire déformer comme je le souhaite, même si je suis assez doué pour les systèmes 2D et d'animation, donc je n'utilise jamais le système intégré.

Tout ce que je dis, c'est de définir vos besoins. Peut-être que vous n'avez besoin ni de l'un ni de l'autre, si votre interface utilisateur n'ajoute / ne supprime pas d'éléments et ne se rafraîchit pas. Ou peut-être voulez-vous écrire un jeu de cartes et les jeter virtuellement sur une table, puis utiliser UICollectionView avec un système physique pour son guide de mise en page.

Stephen J
la source
0

En fonction de nos besoins, nous choisissons TableView ou CollectionView.

Exemple:

Pour les contacts téléphoniques, tableView est la meilleure option.

Pour la galerie de photos, la vue de la collection sera la meilleure option.

Ramdhas
la source
7
Bien que je sois d'accord, la façon dont cela a été présenté ressemble plus à une opinion et je pense que cela devrait être simplement un commentaire et non une réponse.
Popeye
0

J'ai eu ce problème dans mon projet actuel. Lequel utiliser. Dans mon cas, c'était vraiment simple. J'avais besoin des deux. J'avais besoin de ma vue pour ressembler à UITableView et aussi pour changer sa modification / mise en page. Ainsi, UICollectionView a été utilisé. J'utilise également UITableView partout où je n'ai pas besoin de personnalisation supplémentaire. Étant donné que UiTableView est livré avec une disposition par défaut qui comprend des images et du texte, je l'utilise pour plus de simplicité.

Robert J. Clegg
la source
0

En fonction de nos besoins, nous choisissons la vue UITableView ou UICollection.

Si nous voulons afficher des images ou des éléments sous forme de grille ou si nous avons besoin de plus de personnalisation, nous utilisons UICollectionview.

Pour lister chaque article avec des détails et des sous-détails, nous utilisons UITableView.

UICollectionView: la classe UICollectionView gère une collection ordonnée d'éléments de données et les présente à l'aide de dispositions personnalisables. Les vues de collection fournissent la même fonction générale que les vues de table, sauf qu'une vue de collection peut prendre en charge plus que des mises en page à une seule colonne.

UITableView: une vue de table affiche une liste d'éléments dans une seule colonne. UITableView est une sous-classe de UIScrollView, qui permet aux utilisateurs de faire défiler la table, bien que UITableView autorise uniquement le défilement vertical.

firoz khan
la source
0

Selon ma vue pour l'affichage Grid View, utilisez UI Collection View.Toutes les autres vues de liste utilisent UITable View

Subathra D
la source
0

Personnellement, je pense que UICollectionView peut faire la plupart du travail que UITableview peut faire. eh bien, en même temps, c'est plus complexe à utiliser.

Je vous suggère d'utiliser UICollectionView comme TableView au cas où votre responsable changerait à l'avenir.

Qi Li
la source