Bouton, entourage bleu

tabliertablier Membre
juillet 2015 modifié dans Objective-C, Swift, C, C++ #1

Je reprends un vieux programme en Objective-C.


En haut de la fenêtre principale, j'ai ce qui est sur l'image ci-dessous.


L'entourage bleu du bouton devrait marquer le bouton qui a le focus (vrai?)


je peux cliquer n'importe lequel des deux boutons, c'est toujours le bouton extraction qui reste illuminé en bleu! Je n'arrive pas non plus à  supprimer cette illumination bleu.


Sur StackOverflow j'ai trouvé ça qui ne marche pas ici:


button {   


  outline: none;  // this one


}


J'ai remplacé button par l'outlet qui le pointe bien sur.

Y a-t-il une solution pour supprimer ce halo irritant.

 

Réponses

  • AliGatorAliGator Membre, Modérateur
    Y'a pas un truc avec quand la shortcutKey associée au bouton c'est "Return", ça considère que c'est le bouton par défaut, et donc ça le met en bleu ? (Y'a ça pour les NSDialog pour faire des alertes multi-bouton, pour mettre le bouton par défaut en bleu, je suis pas sûr que ça s'applique pour ton cas car ce n'est pas tout à  fait le même contexte mais bon ça vaut le coup de regarder)
  • Ouais, je vais regarder.


  • tabliertablier Membre
    juillet 2015 modifié #4

    j'ai vérifié que le bouton par défaut pour CR est le bouton Ok en bas de la fenêtre et les deux boutons du haut n'ont pas de ShortCutKey. Donc ce n'est pas ça.


    Intuition: en me baladant dans Xcode, j'ai vu que l'entourage bleu change d'objet avec la touche escape. Il faut que je trouve sous Xcode 6.4 comment on définit la chaine des objets soumis à  la touche escape et que je modifie cette chaà®ne pour qu'elle ne comporte que le bouton Ok à  la place du bouton extraction.


    Je savais faire ça sous Xcode 4, Mais j'ai oublié !


  • AliGatorAliGator Membre, Modérateur
    C'est pas la ResponderChain ? Y'a pas un lien "nextResponder" que tu peux mettre sur les objets pour forcer un ordre ? (Je dis ça j'ai pas fait de dev OSX depuis des lustres donc ma mémoire flanche sûrement)
  • Faut que j'aille voir ça !


  • CéroceCéroce Membre, Modérateur

    J'ai actuellement ce problème sur mon appli. Dans mon cas, et j'imagine que dans le tien, c'est pareil, j'ai mis un NSButton à  l'intérieur d'un NSToolbarItem. Or, parfois, (mais pas systématiquement) le focus est donné à  ce NSButton; il devient First Responder.


     


    J'ai essayé un tas de méthodes pour résoudre ce problème, et la seule qui fonctionne est de sous-classer NSButton:



    @implementation LTMNotFirstResponderButton

    -(BOOL)acceptsFirstResponder {
    return NO;
    }

    -(BOOL)becomeFirstResponder {
    return NO;
    }

    @end

    Note que je ne suis pas sorti d'affaire pour autant, il semble que la fenêtre devient inactive du coup, et même la cliquer ne la réactive pas.


     


    Pour ceux qui en doutent, les bugs de Yosemite ne sont pas une légende.


  • Pour moi, le bouton est dans la fenêtre, je n'ai pas utilisé de NSToolbar. Point particulier à  chaque clic je change l'image et le titre de ce bouton. J'ai essayé diverses choses, rien ne marche !


  • CéroceCéroce Membre, Modérateur

    Je ne comprends pas, ta copie d'écran utilise clairement une toolbar, non ?


  • Non, pas de ToolBar. pour être plus explicite j'ai fait une copie d'écran dans l'éditeur en enlevant le texturage. Dans la box centrale je mets un NSView qui dépend de l'état des boutons (évidemment!)


    Le dessin original date de Xcode 2.5 !


     


  • Ah bah oui alors c'est logique...



    [button setFocusRingType: NSFocusRingTypeNone]

    ça vaut aussi pour Céroce d'ailleurs.


    Même si dans ton cas je me demanderai d'abord si mettre un NSButton dans un NSToolbarItem vu qu'il est sensé agir comme tel...


  • CéroceCéroce Membre, Modérateur
    juillet 2015 modifié #12

    Ah bah oui alors c'est logique...

    [button setFocusRingType: NSFocusRingTypeNone]

    Ben non, ça n'empêche pas le bouton d'être first responder, ça fait juste que ça ne se voit pas. Parce ce qui se passe vraiment, c'est que comme c'est le first responder qui fait la validation des objets de l'IHM (méthode -validateUserInterfaceItem:), alors tout se retrouve désactivé.
     

    Même si dans ton cas je me demanderai d'abord si mettre un NSButton dans un NSToolbarItem vu qu'il est sensé agir comme tel...

    Pas le choix, Apple n'a pas pensé qu'on voudrait présenter un NSPopover depuis un NSToolbarItem.
  • Cela parait marcher pour moi. Plus d'entourage bleu, et les boutons fonctionnent dans la fenêtre principale et dans les NSView incluses.


     


    Mon dernier essai: J'ai supprimé tous les [button setFocusRingType:...] et, pour tous les boutons sauf le bouton OK, dans les attributs j'ai validé "Refuses First Respondeur". L'entourage bleu est maintenant autour du bouton Ok dont le "key equivalent" est la touche CR.


    Cela parait compréhensible comme interface ! Par contre, pourquoi la touche Ok n'est pas totalement bleu, mystère et boule de gomme.


    Le programme (certainement buggué), juste pour montrer le GUI obtenu:


     


Connectez-vous ou Inscrivez-vous pour répondre.