2014-11-01 11 views
18

Stworzyłem aplikację Cocoa w Xcode6, która wykorzystuje storyboardy. Jako szablon Xcode udostępnia okno dla aplikacji. Chcę dodać drugie okno, aby pokazać, kiedy program jest najpierw ładowany. Zasadniczo pojawią się dwa okna.Inicjowanie innego okna przy użyciu scenorysu dla OS X

Umieściłem kontroler okna na Main.storyboard, gdzie znajduje się także pierwsze okno. Jednak nie udało mi się znaleźć sposobu na pokazanie tego drugiego okna po uruchomieniu programu. Czy mógłbyś mi pomóc?

Dziękuję.

Odpowiedz

33

W swojej Storyboard wybierz drugi kontroler okien. W Inspektorze tożsamości, podaj nazwę tego kontrolera oknem, np secondWindowController

Następnie w aplikacji delegata założyć nieruchomości na kontrolerze okno:

@property NSWindowController *myController; 

w swojej applicationDidFinishLaunching: wdrożenie metody, tworzyć odniesienie do Storyboard. W ten sposób uzyskasz dostęp do kontrolera okien z storyboardu. Po tym, jedyne co pozostało do zrobienia, to wyświetlenie okna poprzez wysłanie kontrolera okna do metody showWindow :.

#import "AppDelegate.h" 

@interface AppDelegate() 

@end 

@implementation AppDelegate 
@synthesize myController; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Main" bundle:nil]; // get a reference to the storyboard 
myController = [storyBoard instantiateControllerWithIdentifier:@"secondWindowController"]; // instantiate your window controller 
[myController showWindow:self]; // show the window 
} 

@end 
+1

Dzięki! Musiałem również ustawić "ID Storyboard ID" na "Main" i zadziałało. – Hakan

+0

'' '[storyBoard instantiateInitialController]' '' może być użyte do obejścia problemu z identyfikatorem (o ile ustawiłeś odpowiednie okno, jako początkowy kontroler widoku w pliku scenorysu. – Supertecnoboff

4

Swift 3 wersja:

var myWindowController: NSWindowController! 

override init() { 
    super.init() 

    let mainStoryboard = NSStoryboard.init(name: "Main", bundle: nil) 
    myWindowController = mainStoryboard.instantiateController(withIdentifier: "myWindowControllerStoryboardIdentifier") as! NSWindowController 
    myWindowController.showWindow(self) 
} 

Upewnij zdefiniować myWindowController poza funkcją albo okno nie pojawi się.

Właściwie lepiej to zrobić w init() (AppDelegate), ponieważ może być potrzebny wcześniej.

1

Swift 4 wersja:

var monitorcontroler: NSWindowController! 

override init() { 
    super.init() 

    let mainStoryboard = NSStoryboard.init(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil) 
    monitorcontroler = mainStoryboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "moniteur")) as! NSWindowController 
    monitorcontroler.showWindow(self) 
} 
Powiązane problemy