2016-03-05 1 views
1

Je veux ouvrir un panneau de préférences dans mon application Cocoa lorsqu'un utilisateur tape le menu Preferences... ou en tapant ⌘ +,. Donc je me suis connecté de l'élément de menu de préférences au contrôleur de fenêtre dans le storyboard en tant que show segue.Ouvrir la fenêtre infinie de fenêtre Préférences dans l'application Cocoa lors de l'utilisation Segue

Cependant, alors que le volet de préférences s'ouvre lorsque l'utilisateur appuie sur Preferences..., si l'utilisateur appuie de nouveau sur l'élément de menu avant de fermer le volet, un autre volet va être lancé et affiché à l'écran.

Je ne souhaite qu'un seul volet de préférences sur mon écran, mais comment puis-je faire cela? Je veux le configurer uniquement sur le storyboard et éviter le codage qui fait le nid du nid d'éléments de menu ennuyeux ...

Répondre

4

Afin d'empêcher le lancement des fenêtres plusieurs fois, vous sélectionnez Single à partir de l'attribut du contrôleur de fenêtres. Inspecteur sur Storyboard.

enter image description here

La valeur par défaut est Multiple, ce qui provoque les fenêtres infinies à lancer.

Sinon, si vous voulez utiliser le code, voici ce que je ferai dans AppDelegate.swift.

extension AppDelegate: NSSeguePerforming { 
    func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool { 
     if identifier == OpenPreferencesIdentifier { 
      let windows = NSApp.windows 
      for window in windows { 
       if window.windowController?.className == MyPreferencesWindowController.className() { 
        return false 
       } 
      } 
     } 

     return true 
    } 
} 

N'oubliez pas de définir l'identifiant de segment approprié sur Storyboard.