Pourquoi NSButton et NSButtonCell

olofolof Membre
22:57 modifié dans API AppKit #1
Bonjour à  tous,

en essayant de créer des boutons dynamiquement dans une NSView perso, je tombe sur deux objets, NSButton et NSButtonCell. Mais j'ai de la peine à  comprendre le but exact de ces deux objets. Quelqu'un aurait un lien qui m'en dirait un poil plus ? Y'a-t-il un lien entre ces deux objets lorsqu'on créé un bouton dans une fenêtre ?

Parce que là , je sèche !

Merci !

Réponses

  • Philippe49Philippe49 Membre
    juin 2007 modifié #2
    dans 1181194174:

    NSButton et NSButtonCell.


    Lire les documents "Control and Cell Programming Topics" et "Button Programming Topics"
    file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Conceptual/ControlCell/index.html#//apple_ref/doc/uid/10000015i

    En gros NSButtonCell est une vue graphique, dont les événements sont contrôlés par NSButton
  • olofolof Membre
    22:57 modifié #3
    Ok, après quelques lectures, j'y vois un poil plus clair. Je vois surtout que pour mon besoin, il me suffit de manipuler un NSButton.

    Par contre, j'ai le problème suivant. J'ai une vue perso (qui étend NSView) dans laquelle je fais des dessins. J'y place aussi (dynamiquement) un bouton. Parfait, il s'affiche comme je le veux. Mais lorsque je clic dessus, rien ne se passe. Je veux dire par là  qu'il ne change même pas de couleur momentanément (mon bouton est de type NSMomentaryPushInButton). Si j'en créé un à  côté de ma vue person avec IB (sans le relier à  une action) il devient gris quand je clic dessus. Pas le mien.

    Y'a-t-il quelque chose de spécial à  faire ?

    Voici le bout de code qui affiche ce bouton :

    <br />	butMoisMoins = [[NSButton alloc] initWithFrame:NSMakeRect(50,rect.size.height-20 - TAILLE_BORD_H,20,20)];<br />	[butMoisMoins setBezelStyle:NSSmallSquareBezelStyle];<br />	[butMoisMoins setButtonType:NSMomentaryPushInButton];<br />	[butMoisMoins setTitle:@&quot;-&quot;];<br />	[self addSubview:butMoisMoins];<br />
    



    Merci !
  • olofolof Membre
    22:57 modifié #4
    J'ai ajouter une target et une action à  mon button et j'ai implémenté la méthode accpetsFirstResponder (return YES) au niveau de ma vue. Ca fonctionne. Mais mon bouton reste désesperement blanc...
  • Philippe49Philippe49 Membre
    22:57 modifié #5
    dans 1181240786:

    Par contre, j'ai le problème suivant. J'ai une vue perso (qui étend NSView) dans laquelle je fais des dessins. J'y place aussi (dynamiquement) un bouton.

    Drôle d'idée de mettre le bouton à  l'intérieur de la custom view
    Pourquoi ne pas la mettre dans la fenêtre (mettre un outlet window au contrôleur, et ajouter le bouton à  [window contentView])

    dans 1181240786:

    Si j'en créé un à  côté de ma vue person avec IB (sans le relier à  une action) il devient gris quand je clic dessus. Pas le mien

    Manque de synchronisation entre le rafraichissement de la fenêtre et du bouton? ou bien problème du NSButtonCell associé ? essaye les méthodes [.. cellClass] de la classe NSControl parent.
  • Eddy58Eddy58 Membre
    22:57 modifié #6
    Chez moi le code ci-dessus fonctionne bien, je te joins le projet d'essai. :)

    [Fichier joint supprimé par l'administrateur]
  • laurrislaurris Membre
    22:57 modifié #7
    dans 1181247465:

    J'ai ajouter une target et une action à  mon button et j'ai implémenté la méthode accpetsFirstResponder (return YES) au niveau de ma vue. Ca fonctionne. Mais mon bouton reste désesperement blanc...


    Il faut borderiser le bouton avec setBordered:
    AcceptsFirstresponder: rien à  voir ?!
  • olofolof Membre
    22:57 modifié #8
    dans 1181252512:

    Chez moi le code ci-dessus fonctionne bien, je te joins le projet d'essai. :)

    En effet... Je vais voir ça de plus près. Merci d'avoir pris le temps de le faire !
  • olofolof Membre
    22:57 modifié #9
    dans 1181256605:

    dans 1181247465:

    J'ai ajouter une target et une action à  mon button et j'ai implémenté la méthode accpetsFirstResponder (return YES) au niveau de ma vue. Ca fonctionne. Mais mon bouton reste désesperement blanc...


    Il faut borderiser le bouton avec setBordered:
    AcceptsFirstresponder: rien à  voir ?!


    le setBordered ne change rien.

    J'ai parlé du AcceptsFirstResponder pour préciser que l'action était bien transmise à  la cible (sans le AcceptsFirstResponder, c'est pas le cas) mais que graphiquement ça ne changait rien...
  • 22:57 modifié #10
    Graphiquement, c'est setBezelStyle:
  • olofolof Membre
    22:57 modifié #11
    dans 1181251758:

    dans 1181240786:

    Par contre, j'ai le problème suivant. J'ai une vue perso (qui étend NSView) dans laquelle je fais des dessins. J'y place aussi (dynamiquement) un bouton.

    Drôle d'idée de mettre le bouton à  l'intérieur de la custom view
    Pourquoi ne pas la mettre dans la fenêtre (mettre un outlet window au contrôleur, et ajouter le bouton à  [window contentView])

    dans 1181240786:

    Si j'en créé un à  côté de ma vue person avec IB (sans le relier à  une action) il devient gris quand je clic dessus. Pas le mien

    Manque de synchronisation entre le rafraichissement de la fenêtre et du bouton? ou bien problème du NSButtonCell associé ? essaye les méthodes [.. cellClass] de la classe NSControl parent.



    Oups, j'avais pas vu ta réponse, désolé !

    Pour le premier point, le but est de faire quelque chose de réutilisable. J'ai un objet view perso qui gère un calendrier et le choix du mois et de l'année se fait dans cet objet.

    Pour le deuxième point, je regarde ça dès ce soir.

    Merci
  • AliGatorAliGator Membre, Modérateur
    juin 2007 modifié #12
    dans 1181251758:

    Drôle d'idée de mettre le bouton à  l'intérieur de la custom view
    Pourquoi ne pas la mettre dans la fenêtre (mettre un outlet window au contrôleur, et ajouter le bouton à  [window contentView])
    Mmmm... pas vraiment adapté ça je pense : tu ne peux pas être sûr alors que le bouton que tu rajoutes ne serais pas à  cheval sur une NSView de même niveau.
    Or il ne faut pas que des NSView de même niveau se chevauchent ! (et comme NSButton dérive de NSView...)
    Donc ne faudrait-il pas ajouter le bouton en tant que subview (de sa custom view) ? (via [tt]addSubView:[/tt])
  • olofolof Membre
    22:57 modifié #13
    dans 1181312114:

    Donc ne faudrait-il pas ajouter le bouton en tant que subview (de sa custom view) ? (via [tt]addSubView:[/tt])


    Ca tombe bien, c'est droit ce que je fais, voir mon deuxième post :

    dans 1181240786:

    <br />	butMoisMoins = [[NSButton alloc] initWithFrame:NSMakeRect(50,rect.size.height-20 - TAILLE_BORD_H,20,20)];<br />	[butMoisMoins setBezelStyle:NSSmallSquareBezelStyle];<br />	[butMoisMoins setButtonType:NSMomentaryPushInButton];<br />	[butMoisMoins setTitle:@&quot;-&quot;];<br />	[self addSubview:butMoisMoins];<br />
    

  • olofolof Membre
    22:57 modifié #14
    Ok, c'est bon, j'ai vu mon (énorme) bêtise...

    J'ajoutais mes boutons dans la méthode drawRect. C'est bête hein ? Bon, j'ai une excuse, je débute.

    J'ai mis tout ça dans la méthode initWithFrame et ça roule.

    Merci pour les coups de main
  • Eddy58Eddy58 Membre
    22:57 modifié #15
    dans 1181320272:

    Ok, c'est bon, j'ai vu mon (énorme) bêtise...

    J'ajoutais mes boutons dans la méthode drawRect. C'est bête hein ? Bon, j'ai une excuse, je débute.


    Une triple tournée générale et on oublie ça !  ::)  ;D  :p :p :p :p :p :p
  • olofolof Membre
    22:57 modifié #16
    dans 1181323727:

    Une triple tournée générale et on oublie ça !  ::)  ;D  :p :p :p :p :p :p


    Avec plaisir !!!!

    :p :p   :p :p   :p :p

    Santé à  tous  :)
Connectez-vous ou Inscrivez-vous pour répondre.