2016-08-07 1 views
0

Je pense que je ne comprends vraiment pas comment les vues et les fenêtres sont gérées via les contrôleurs de vue et les contrôleurs de fenêtres des storyboards.Sous-classe NSWindowController ou NSViewController dans OS X

Voici mon problème: J'ai une fenêtre avec un mainView, géré par myMainViewController. Tout ce que je veux faire est de faire un bouton dans mainView pour montrer une autreWindow (contenant un autreView) et envoyer des données de myMainViewController à un autreViewView. En utilisant le storyboard, j'ai fait glisser un contrôleur de fenêtre (avec sa vue associée) et connecté le bouton à la fenêtre (et performsegue). Mais comment suis-je censé accéder aux commandes d'un autre viewView depuis myMainViewController? Dois-je créer une classe anotherWindowController ou anotherViewController?

  • Et le deuxième cas, comment puis-je y accéder via myMainViewController?
  • Dois-je les créer tous les deux, même si je n'aurais rien à gérer sur l'autre fenêtre (seulement sa vue)? Fondamentalement, le bouton sur le mainView devrait envoyer une image et une chaîne à une autre vue, incorporée dans une autre fenêtre. Je suis sûr qu'il est évident, mais je suis un peu confus avec la documentation Apple, pas très clair ...

    Merci

    Josh

  • Répondre

    0

    On dirait que vous avez besoin: 1) créer une nouvelle vue personnalisée contrôleur (nouvelle classe qui est sous classage nsviewcontroller) 2) créer deux propriétés en elle (l'une pour l'image, une autre pour la chaîne)

    var myImage: NSImage! 
        var myText: NSString! 
    

    3) après pression sur le bouton, dans la cible, vous devez créer un nouvel objet de votre Nouveau classe comme une variable, et à travers elle l'accès aux propriétés créées

    var secondController = SecondViewController() 
        secondController.myImage = //set your image 
        SecondController.myText = //set your string 
    

    4) et maintenant présenter votre deuxième contrôleur de vue (en utilisant presentViewController), et maintenant, vous pouvez utiliser les propriétés nécessaires dans la méthode viewDidLoad de viewController

    +0

    Réservoirs ouverts mais apparemment, l'utilisation de presentViewController est contradictoire à l'utilisation de segue. En fait, j'ai finalement réussi le problème. J'ai juste dû implémenter prepareforsegue dans le contrôleur de vue initial, et tester 'si let vc = segue.destinationController.contentViewController comme? AnotherViewController ' – Joshua

    +0

    Oui, cette option est une bonne décision si vous utilisez l'éditeur visuel et si votre bouton doit simplement ouvrir le contrôleur sans autres actions, ma méthode est plus unifiée. – KostiaZzz