2011-12-09 9 views
3

Y a-t-il un moyen de masquer le bouton contextuel d'un NSComboBox? Je ne trouve rien dans la documentation pour NSComboBox ou NSComboBoxCell. Il y a une méthode setButtonBordered: sur NSComboBox, mais cela change juste à un style de bouton altérer.Masquer/désactiver le bouton NSComboBox

Si je ne peux pas le cacher, puis-je au moins le désactiver?

+0

J'ai posté une solution de contournement ci-dessous qui peut fonctionner pour vous. Dans mon application, j'aimerais toujours pouvoir le cacher, donc je serais heureux d'entendre d'autres réponses. – paulmelnikow

Répondre

0

Si la zone de liste déroulante ne contient aucun élément, cliquer sur le bouton contextuel ne fait rien. Vous pouvez peut-être contourner la limitation en vidant la liste lorsque vous souhaitez désactiver le bouton.

Le clic n'a aucun effet, mais il ne masque pas le bouton ou ne le dessine pas comme désactivé.

+0

Pas vraiment - en cliquant sur le bouton la zone de liste déroulante affichera toujours une zone de liste vide. – adib

0

Je ne pense pas que ce soit possible. Un NSComboBox sans le bouton est effectivement un NSTextField, donc je suppose que cela a été jugé inutile. Vous pourriez probablement le faire en sous-classant NSComboBoxCell et surcharger -drawWithFrame: inView: ou -drawInteriorWithFrame: inView :. Le moyen le plus sûr serait probablement d'ajouter votre propre propriété buttonHidden et d'utiliser la méthode d'exécution ObjC class_getMethodImplementation pour rechercher l'IMP de la même méthode dans NSTextField et de l'appeler lorsque le bouton est masqué. Vous appelez effectivement super super, de sorte que vous obtenez un look champ de texte régulier.

Questions connexes