Changement dynamique d'un type de NSCell dans une NSTableColumn
Eddy58
Membre
Je voudrais savoir s'il est techniquement possible de changer dynamiquement le type de sous-classe d'une NSCell dans une NSTableColumn, et cela pour une row donnée.
Là par exemple j'ai une NSTableColumn initialisée avec des NSComboBoxCell dans IB. Dans certains cas, pour une row particulière, il me faudrait pouvoir changer la NSComboBoxCell en NSTextFieldCell pour empêcher l'utilisation du ComboBox et visualiser seulement du texte. Bon, il est tout simplement possible de régler la cell en faisant un "setEnabled:NO" dessus pour régler le problème, mais ça serait bien mieux de faire disparaà®tre la NSComboBoxCell. (En faites de la changer en NSTextFieldCell)
Dans une NSTableColumn avec des NSButtonCell de type switch, au lieu de faire un "setEnabled:NO" sur une cell pour empêcher l'utilisation de son bouton, je fais un "setImagePosition:NSNoImage", pour faire disparaà®tre le bouton. Donc j'aimerais appliquer le même principe pour la colonne avec les ComboBox.
Si quelqu'un a une idée ou qu'il a déjà expérimenté la chose, qu'il me fasse signe. 8)
Là par exemple j'ai une NSTableColumn initialisée avec des NSComboBoxCell dans IB. Dans certains cas, pour une row particulière, il me faudrait pouvoir changer la NSComboBoxCell en NSTextFieldCell pour empêcher l'utilisation du ComboBox et visualiser seulement du texte. Bon, il est tout simplement possible de régler la cell en faisant un "setEnabled:NO" dessus pour régler le problème, mais ça serait bien mieux de faire disparaà®tre la NSComboBoxCell. (En faites de la changer en NSTextFieldCell)
Dans une NSTableColumn avec des NSButtonCell de type switch, au lieu de faire un "setEnabled:NO" sur une cell pour empêcher l'utilisation de son bouton, je fais un "setImagePosition:NSNoImage", pour faire disparaà®tre le bouton. Donc j'aimerais appliquer le même principe pour la colonne avec les ComboBox.
Si quelqu'un a une idée ou qu'il a déjà expérimenté la chose, qu'il me fasse signe. 8)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bon ça demande de sous-classer NSTableColumn, mais je vais essayer ça.
Je fais un essai en voulant simplement remplaçer la NSTextfieldCell de la row 0 par un NSButtonCell, mais le problème est qu'au lancement de l'appli, j'ai des messages d'erreur puis un SIGTRAP pour clore le tout.
Je ne comprend pas cet appel à la méthode setDrawsBackground: que je ne demande pas dans mon code, et qui de plus est pour les NSTextfieldCell ?
J'ai fait une sous-classe de la NSTableColumn dans IB, et elle est avec des NSTextFieldCell par défaut.
Je commence par releaser la cell que je veux remplacer en row 0, puis ensuite j'initialise la NSButtonCell, que je retourne ensuite. Le problème est-il au niveau de la release de la NSTextfieldCell ? Je voudrais bien savoir où ça ne va pas.... :-\
Je n'ai jamais essayé ce genre de truc, mais je ne ferais pas de release sur le cell de la table, j'initialiserais un NSButtonCell au démarrage et puis dans dataCellForRow:
Je continue mes recherches....
Normalement, chaque colonne possède une NSCell de référence (ou de prototype), et cette dernière est théoriquement utilisée (par copie) pour l'affichage du contenu des cellules de chaque colonne...
Maintenant, que se passe t'il si lors de l'affichage d'une cellule, le système pense avoir affaire à une NSTextFieldCell (qui répond au message setDrawsBackground: ) car c'est celle qui est prototype, alors que réellement, c'est une NSButtonCell qui est utilisée (et qui ne répond pas à setDrawsBackground: )
Cela mériterait quelques tests pour valider/invalider cette théorie...
.
Pour essayer j'ai lancé l'appli, sans problème mais rien n'apparaà®t dans la colonne car il n'y a pas de datasource. Ensuite j'ai fait un contrôleur où j'ai mis des datasources minimums, et puis au lancement de nouveau plantage SIGBUS....:(
Je voulais justement régler les valeurs selon le cas textfield ou switchbutton dans la datasource, mais apparemment il y a encore un problème dans dataCellForRow, ce qui fait planter les datasources je pense. Je vais essayer d'initialiser la NSButtonCell avec setObjectValue.
:crackboom:-
A la recherche d'un bout de code sur le net pour me débloquer, j'ai trouvé
sur ce site Japonais (merci les amis Cocoaà¯stes du soleil levant ) ce qui n'allait pas. Il faut également spécifier la fonte lors de l'initialisation de la cell, et c'est de là que venait le plantage. Maintenant je vais pouvoir apporter les modifs qui le font bien dans mon projet. ;D :spot:
Merci :why?:
Ou si c'est pour toute la colonne, c'est faisable directement dans IB.