2014-11-01 12 views
18

Ho creato un'applicazione Cocoa in Xcode6 che utilizza gli storyboard. Come modello, Xcode fornisce una finestra per l'applicazione. Voglio aggiungere una seconda finestra per mostrare quando il programma viene caricato per la prima volta. Quindi, fondamentalmente, ci saranno due finestre mostrate.Inizializzazione di un'altra finestra utilizzando lo storyboard per OS X

Ho messo un controller di finestra su Main.storyboard dove risiede anche la prima finestra. Tuttavia, non ho trovato il modo di mostrare questa seconda finestra all'avvio del programma. Potresti per favore aiutare?

Grazie.

risposta

33

Nello Storyboard, selezionare il secondo controller della finestra. Nella finestra di ispezione identità, specificare un nome per questo controller finestra, ad esempio secondWindowController

Poi, nel vostro app delegato, impostare una proprietà per il controllo della finestra:

@property NSWindowController *myController; 

Nella tua applicationDidFinishLaunching: implementazione del metodo, creare un riferimento allo storyboard. In questo modo si ottiene l'accesso al controller della finestra dallo storyboard. Dopodiché, l'unica cosa che rimane da fare è visualizzare la finestra inviando il controller della finestra a showWindow: method.

#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

Grazie! Ho anche dovuto impostare "ID Storyboard" su "Principale" e ha funzionato. – Hakan

+0

'' '[storyBoard instantiateInitialController]' '' può essere utilizzato per aggirare il problema dell'ID (a patto che sia stata impostata la finestra desiderata, come controller della vista iniziale nel file storyboard. – Supertecnoboff

4

Swift 3 Versione:

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

Assicurarsi di definire myWindowController di fuori della funzione, altrimenti la finestra non verrà mostrata.

In realtà è meglio farlo in init() (di AppDelegate) poiché potrebbe essere necessario in precedenza. Versione

1

rapida 4:

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