Les différences entre les NSTableView et NSCollectionView
-
11-09-2019 - |
Question
Je suis en train de décider quel chemin prendre pour développer mon application Snow Leopard. Tout d'abord, je devrais commencer avec les différences évidentes:
NSTableView
peut avoir plusieurs colonnes de données pour représenter les différentes parties du même « élément » de données (une ligne) où NSCollectionView
peut afficher une grille de données aussi bien, mais chaque rangée + combo de colonne est son propre élément. Pour mes fins, je suppose que je traite une seule colonne.
-
Pour autant que je peux dire, les éléments de
NSCollectionView
sontNSView
s qui doivent tous être des mêmes dimensions. En outre, contrairementNSTableView
, les éléments sont copiés dans main collection laNSCollectionView
au lieu d'être fourni au besoin par undataSource
(je suis pas sûr de cela, s'il vous plaît me corriger si je me trompe). -
NSTableView
utiliseNSCell
s si vous décidez de personnaliser l'affichage des lignes. CommeNSCell
est pas unNSResponder
, comment peut-on les événements de la poignée (si je voulais ajouter une sorte d'accessoire à la cellule, comme la façon dont les flèches dans le travail iTunes (bien que, iTunes est Carbon). Je l'ai vu certaines sous-classes deNSCell
dans IB qui semblent être équivalents de leurs frèresNSControl
, mais si je veux avoir des objetsMySweetView
dans unNSCell
?). -
Les deux semblent travailler sur le même avec égards aux consolidations, correct?
-
Enfin,
NSCollectionView
semble jouer bien avec animation de ses éléments (pour les articles de ré-arrangement, ou de les filtrer, par exemple). PeutNSTableView
faire avec ses lignes?
Tout ce que je devrais considérer?
La solution
- La différence ici est que dans une vue de table, chaque ligne est un élément, et les colonnes différents aspects (propriétés) de cet article. Dans une vue de collection, chaque intersection ligne-colonne est un élément.
- Je n'ai pas fait cela, mais essayez de mettre en œuvre
tableView:didClickTableColumn:
dans votre délégué vue de tableau. Cette méthode est nouvelle en 10.6. Vous auriez besoin d'obtenir[NSApp currentEvent]
, et probablement passer à une méthode dans la cellule de la colonne. - En vue de la table, vous liez la colonne; vous ne lient pas la vue (pas fournir du contenu, de toute façon, vous ne lient le point de vue pour des choses comme les index de sélection). En vue de la collecte, il n'y a pas de colonnes (voir # 1), de sorte que vous lierez toujours la vue.
- Non.
Autres conseils
FWIW, NSTableView est une très vieille AppKit, et il est un peu crufty.
Si vous êtes nouveau à la plate-forme, je vous recommande de prendre votre tête autour NSCollectionView premier.