NSSearchField bouton Cancel

skimpyskimpy Membre
04:49 modifié dans API AppKit #1
Bonjour,

Existe-t'il un moyen pour forcer l'affichage du bouton Cancel dans un NSSearchField. Par défaut, celui-ci apparaà®t seulement lorsque l'on commence à  taper du texte.
Mon but est de faire la chose suivante :

- Lorsque l'utilisateur a saisi du texte et qu'il clique sur le bouton, ça efface le contenu (comportement par défaut)
- Lorsque l'utilisateur clique sur le bouton et qu'aucun texte n'est saisi, le NSSearchField disparaà®t.

Merci

Réponses

  • HerveHerve Membre
    04:49 modifié #2
    A priori en surdéfinissant les méthodes. Tu fais dériver ta classe de NSSearchField et tu redéfinis les méthodes. J'ai pas essayé avec ça, mais avec d'autres trucs, ça marche.
  • Bonsoir,



    J'ai finalement abandonné l'idée de faire apparaà®tre en permanence le bouton Cancel mais je me heurte à  un autre problème. J'ai sous classé la classe NSSearchField et j'ai ajouté dans la méthode drawRect: un NSButton qui est situé juste à  gauche du bouton Cancel. Voici mes 2 problèmes :



    - Lorsque je clique sur mon bouton, rien ne se passe (son apparence d'ailleurs ne change pas). J'ai bien fait un setAction et setTarget mais la souris n'agit pas.



    - Quel est le moyen pour réduire la zone d'écriture dans le searchfield ? Pour être plus explicite, quand on tape du texte et qu'on arrive près du bouton Cancel par exemple, le texte commence à  scroller. Comme le bouton que j'ai ajouté se situe devant le bouton Cancel, je souhaiterais que le texte commence à  scroller à  partir de mon bouton.



    Merci pour vos conseils.
  • 'skimpy' a écrit:


    Bonsoir,



    J'ai finalement abandonné l'idée de faire apparaà®tre en permanence le bouton Cancel mais je me heurte à  un autre problème. J'ai sous classé la classe NSSearchField et j'ai ajouté dans la méthode drawRect: un NSButton qui est situé juste à  gauche du bouton Cancel. Voici mes 2 problèmes :



    - Lorsque je clique sur mon bouton, rien ne se passe (son apparence d'ailleurs ne change pas). J'ai bien fait un setAction et setTarget mais la souris n'agit pas.



    - Quel est le moyen pour réduire la zone d'écriture dans le searchfield ? Pour être plus explicite, quand on tape du texte et qu'on arrive près du bouton Cancel par exemple, le texte commence à  scroller. Comme le bouton que j'ai ajouté se situe devant le bouton Cancel, je souhaiterais que le texte commence à  scroller à  partir de mon bouton.



    Merci pour vos conseils.




    Il faut ne pas ajouter ton bouton dans la méthode drawRect: !



    Sinon j'ai vu un code qui devrait convenir pour ce que tu voulais faire au départ voir http://pastie.org/1883086



    A+
  • Ok, merci pour le lien. Dans quelle méthode me conseilles-tu de dessiner le bouton ? Si je ne me trompe pas, dans le lien indiqué, la personne fait ça [[fieldCell cancelButtonCell] drawInteriorWithFrame:cancelRect inView:self]; dans la méthode drawRect ?



    Merci.
  • 'skimpy' a écrit:


    Ok, merci pour le lien. Dans quelle méthode me conseilles-tu de dessiner le bouton ? Si je ne me trompe pas, dans le lien indiqué, la personne fait ça [[fieldCell cancelButtonCell] drawInteriorWithFrame:cancelRect inView:self]; dans la méthode drawRect ?



    Merci.




    Autant pour moi, si tu fais que dessiner ton bouton la méthode drawRect est la bonne.
  • Pour mon point n°2 concernant la limite de la zone de texte, il suffit simplement d'implémenter la méthode - (NSRect)searchTextRectForBounds:(NSRect)rect de la classe NSSearchFieldCell.



    Il ne me reste plus qu'à  résoudre la gestion des boutons.
  • Nous avions eu dans ce forum une excellente discussion qui m'a été fort utile sur la création par code de boutons dans une NSView. Je t'y renvoie :



    http://forum.cocoacafe.fr/topic/6633-un-tableau-de-iboutlet-et-de-ibaction/page__p__66005__hl__+tableau +de +nsbutton__fromsearch__1#entry66005



    Note que la méthode de création des boutons est appelé par drawRect mais n'est pas incluse dedans.
Connectez-vous ou Inscrivez-vous pour répondre.