2017-10-20 46 views
4

J'essaie de créer une application macOS menubar qui comportera un champ de texte comme premier élément. Le champ de texte servira de barre de recherche pour filtrer les autres éléments qui seront affichés en dessous.Création d'une application macOS menubar semblable à un mot de passe

Il devrait être très semblable à 1Password:

1password

C'est ce que je réussi à faire:

mine

j'ai accompli en créant un Status menu avec trois articles et créer une vue personnalisée pour le premier élément du menu.

Cependant, cette approche ne semble pas résoudre mon problème. Lorsque vous appuyez sur cmd + A dans le champ de recherche, la mise au point passe à l'élément suivant dans le menu. C'est le comportement par défaut pour NSMenu. Donc, ma question est la suivante: est-ce la bonne approche pour créer une application semblable à 1Password ou y en a-t-il une meilleure?

Répondre

2

Fondamentalement, l'approche est correcte.

Mais vous devez saisir explicitement les événements de clé d'édition. NSTextField et passer outre la sous-classe performKeyEquivalent

class AXCVTextField: NSTextField { 

    override func performKeyEquivalent(with event: NSEvent) -> Bool { 
     if event.modifierFlags.contains(.command) { 
      if let key = event.charactersIgnoringModifiers { 
       var action : String? 
       switch key { 
       case "x": action = "cut:" 
       case "c": action = "copy:" 
       case "v": action = "paste:" 
       case "a": action = "selectAll:" 
       default: 
        break 
       } 
       if action != nil { 
        return NSApp.sendAction(Selector(action!), to:self.window!.firstResponder, from:self) 
       } 
      } 
     } 
     return super.performKeyEquivalent(with: event) 
    } 
} 
+0

J'ai créé une sous-classe classe 'Searchfield: NSTextField {...}' et le définir comme 'la classe de NSTextField'. Cependant, la méthode n'est pas déclenchée quand j'appuie sur 'cmd + A'. En outre, je viens de réaliser que parfois lorsque je cours l'application, je ne peux pas cliquer sur l'entrée. Il ne répond plus, mais les autres 'NSMenuItem' fonctionnent correctement. –

+0

Bien sûr, vous devez concevoir vos vues que le champ de texte est dans la chaîne du répondeur pour recevoir les événements clés. – vadian

+0

Vous voulez expliquer un peu plus en détail? J'ai des problèmes pour le googler –