2014-11-01 1 views
18

Ich habe eine Cocoa-Anwendung in Xcode6 erstellt, die Storyboards verwendet. Als Vorlage stellt Xcode ein Fenster für die Anwendung bereit. Ich möchte ein zweites Fenster hinzufügen, das angezeigt wird, wenn das Programm zum ersten Mal geladen wird. Im Grunde werden also zwei Fenster angezeigt.Initialisierung eines anderen Fensters mit Storyboard für OS X

Ich habe einen Fenstercontroller auf Main.storyboard, wo sich auch das erste Fenster befindet. Allerdings konnte ich das zweite Fenster beim Programmstart nicht finden. Kannst du bitte helfen?

Vielen Dank.

Antwort

33

Wählen Sie in Ihrem Storyboard Ihren zweiten Window Controller aus. Im Identität Inspektoren, geben Sie einen Namen für diese Fenstersteuerung, zB secondWindowController

Dann in AppDelegate, eine Eigenschaft, für die Fenstersteuerung einzurichten:

@property NSWindowController *myController; 

In Ihrem applicationDidFinishLaunching: Methode Implementierung erstellen ein Verweis auf das Storyboard. Auf diese Weise erhalten Sie Zugriff auf Ihren Fenstercontroller über das Storyboard. Danach müssen Sie nur noch das Fenster anzeigen, indem Sie Ihrem Fenstercontroller die showWindow: -Methode senden.

#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

Dank! Ich musste auch die "Storyboard ID" auf "Main" setzen und es funktionierte. – Hakan

+0

'' '[storyBoard instantiateInitialController]' '' kann verwendet werden, um das ID-Problem zu umgehen (solange Sie das gewünschte Fenster als initialen View-Controller in der Storyboard-Datei festgelegt haben. – Supertecnoboff

4

Swift 3-Version:

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) 
} 

Stellen Sie sicher, Sie definieren myWindowController außerhalb der Funktion oder auch das Fenster nicht auf.

Es ist eigentlich besser, dies in init() (von AppDelegate) zu tun, wie Sie es möglicherweise früher brauchen.

1

swift 4 Version:

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) 
}