NSTableColumn taille du contenu
Je suis l'élaboration et à l'encontre de Mac OS X 10.6 (Snow Leopard). Lorsque je double-clic entre deux de mes NSTableView est en-têtes de colonne, la colonne de gauche autosizes, comme vous pouvez attendre.
Je souhaite fournir ce dans un contexte de menu, mais il semble qu'il n'y est pas accessible au public de la fonction pour cela. J'ai Googlé, et regardé la documentation de NSTableView, NSTableHeaderView, et NSTableColumn, mais rien trouvé. J'ai du mal à croire qu'ils ne serait pas d'exposer quelque chose de si utiles quand ils ont évidemment le code écrit pour le faire.
J'ai vu le -[NSTableColumn sizeToFit]
méthode, mais qui ne prend la tête en compte de la taille. Je règle aussi pour l'envoi de la double-cliquez sur l'événement à la NSTableHeaderView, mais je ne pouvais pas comprendre comment le faire, que ce soit.
Mise à jour - j'ai réalisé qu'il est important de mentionner que j'ai un NSArrayController (sous-classe) de fournir les données de ma table, donc je n'ai pas un NSTableViewDataSource
sur qui je pouvais l'appeler -[tableView: objectValueForTableColumn: row:]
. C'est le noeud du problème: chaque colonne est lié à un chemin d'accès clé de contrôleur de groupe et c'est ainsi qu'il obtient ses données, donc il ne peut pas faire une boucle par son contenu.
OriginalL'auteur Dov | 2011-01-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir la longueur de chaque cellule en obtenant les cellules de la colonne.
Puis obtenir la largeur de la cellule.
Après cela, vous pouvez définir la largeur de la cellule, comme la largeur de la colonne.
Le dataCell obtenu a la largeur de la cellule. En fait, j'ai collé le code ci-dessus à partir de l'un de mes programme. Vous pouvez voir un aperçu de mon programme ici: screencast.com/t/4UB3NGPxH4 . J'ai utilisé un NSTableView sur un flottant NSPanel. La largeur de la fenêtre et la vue de la table des changements avec la largeur de la plus grande cellule de la colonne.
Vous êtes tout à fait correcte, la cellule de données retourne la plus grande largeur de toutes les cellules de la colonne.
Notez que pour-vues de table,
dataCellForRow
ne sera pas de retour la bonne cellule. Voir mon autre réponse pour savoir comment faire avec vue basé sur des vues de table.Apple redimensionnement automatique méthode utilise
[NSTableView preparedCellAtColumn:row:]
plutôt que[NSTableColumn dataCellForRow:]
. Aussi, au hasard de l'échantillon le tableau si il a un grand nombre de lignes, plutôt que d'itérer sur toutes les lignes. (Voir la documentation pour l'affichage de la table délégué méthodetableView:sizeToFitWidthOfColumn:
)OriginalL'auteur Raiyan Kabir
La catégorie sur NSTableColumn de redimensionner les colonnes de la même largeur que le double-cliquant sur le séparateur.
OriginalL'auteur user3016798
Pour-vues de table (OS X 10.7 et versions ultérieures), vous devez utiliser le
NSTableView
méthodeviewAtColumn:row:makeIfNecessary:
, puis obtenir la taille.Le code suivant fonctionne si votre vue sur les cellules est un
NSTextField
. Pour d'autres points de vue que vous devez trouver le moyen d'obtenir de sa taille minimale.Dans votre contrôleur, chaque fois que vous pensez que les colonnes doivent être redimensionnées.
En fait, c'est là que je suis un peu confus. Vous voyez, j'ai 8 colonnes, dont 6 sont NSTextField et deux sont NSImageView. Le premier problème que je vois avec le code ci-dessus est NSSize size = [[afficher la cellule] cellSize];. xcode se plaint que les cellules de la méthode peut ne pas répondre. J'ai remplacé la ligne ci-dessus avec NSSize size = vue.cadre.taille; je ne suis pas sûr si son correct. Deuxièmement je remplir ma table (ajouter des objets à la matrice) et de l'appeler [ltableView reloadData]; j'ai pensé que Si j'appelle votre code juste avant la reloadData il pourrait l'aider. Mais il réduit toutes les colonnes au minimum.
J'ai aussi essayé de l'appeler lorsqu'une ligne est ajoutée - (void)tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)de ligne et de nul effet. Pouvez-vous aider?
Comme je l'ai écrit à l'origine, l'exemple ne fonctionne que pour les
NSTextField
; pour d'autres types de cellules, vous aurez besoin d'adapter la taille de la logique de découverte. Comme lorsque, vous devriez être en mesure de le faire à tout moment après la mise en place de la table, par exemple. après l'affectation d'undataSource
.OriginalL'auteur Alexander Staubo
J'ai trouvé la suite de travailler pour moi (écrit en Swift):
Donné une colonne de l'identifiant comme un argument, il trouve la cellule de cette colonne avec la plus longue de contenu, et redimensionne la colonne pour s'adapter à ce contenu.
Il n'a pas de retour de la longueur basé sur la longueur de la chaîne, mais au lieu de la largeur de la cellule (définie par le biais de l'Interface Builder), donc ma cellule de la colonne n'a pas été redimensionnée de façon appropriée. Ce code a examiné le contenu de la cellule et de la découverte de la plus longue chaîne de contenu et redimensionnée.
OriginalL'auteur P.M.
J'avais besoin de faire cette chose elle-même et il s'est avéré (pour moi au moins) pour être un peu plus complexe, ce n'est pas parfait mais presque 😉
p.s. Édité à manipuler l'image des cellules à base de
Oui, c'est compliqué. Hmmm peut-être que ma solution est une autre question. Mon problème qui est apparu semblable à la leur, était pour un redimensionnement automatique des colonnes de leurs colonnes de données de contenu. Si vous vous sentez il y a une solution plus simple, merci de ne poster. Bien sûr, ma question est obscure mais j'espère que la solution posté n'est pas excessivement complexe.
OriginalL'auteur slashlos
Voici quelques méthodes d'extension de la taille des colonnes en fonction de leur contenu en C# pour Monomac développeurs.
REMARQUE: cette tailles des colonnes en fonction de leur contenu seulement, d'autres facteurs non considérés (vide cols sont 10px large, par exemple).
Grâce à slashlos pour l'obj-c d'extrait.
Monomac est C#, pas obj-C. Ce que j'ai donné est juste un (nettoyé) version de la réponse en C#.
Vous êtes à la fourniture d'une nettoyés version du trop-compliqué, plus détaillé, non reconnus de l'Objective-C réponse en C#. Vous ne pouvez pas faire les mêmes appels en C# que l'on a accepté la réponse est en Objective-C? Qui ne serait d'environ 4 lignes de code (même en C#).
L'on a accepté la réponse est fausse. La question veut REDIMENSIONNER les colonnes pour les adapter à leur contenu (ce qui comprend le rétrécissement des colonnes ainsi). Le "compliqué", la réponse est la voie pour le plus sophistiqué "de l'auto-dimensionnement de la fonctionnalité".
Avez-vous vraiment essayé? Il ne fait réduire ou agrandir les colonnes. J'ai été en utilisant le code pour un certain temps.
OriginalL'auteur Herman Schoenfeld
J'ai eu de la difficulté à la mise en œuvre de certains des autres solutions... Mais j'ai réussi à obtenir des colonnes pour redimensionner automatiquement la largeur lorsque les cellules sont créées à l'aide de la cellule de la chaîne de valeur. Semble fonctionner assez bien pour l'instant!
OriginalL'auteur David Douglas