2011-04-05 7 views

risposta

42

Se si desidera creare una classe separata per la nuova finestra, questi sono i passi:

  1. creare una classe che è una classe secondaria di NSWindowController esempio NewWindowController
  2. Creare una finestra xib per la classe NewWindowController.
  3. Il pulsante codice scatto come:

    NewWindowController *windowController = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"]; 
    [windowController showWindow:self]; 
    
+0

grazie ... ha funzionato bene ... :) hai spiegato bene ... grazie ... stavo cercando qualche giorno e ora funzionava benissimo ... :) – ShinuShajahan

+5

Ho provato la stessa cosa , ma il problema che sto avendo è che la nuova finestra si chiude immediatamente dopo essere stata visualizzata. Non ho alcun codice lì dentro, quindi non vedo cosa sto sbagliando. Qualche idea? – Interfector

+0

@Interfector Sto avendo lo stesso problema .. hai capito? –

11
NSWindowController * wc=[[NSWindowController alloc] initWithWindowNibName:@"your_nib_name"]; 
[wc showWindow:self]; 
+0

@ Saurabh-wow! grazie mille! ha funzionato ... grazie ... Sono nuovo per lo stackoverflow ed è piuttosto impressionante ... :) – ShinuShajahan

+0

in realtà stavo cercando lo stesso negli ultimi giorni! :) Ho provato diverso ma non ho sottoclasse NSWindowController !!! – ShinuShajahan

+0

Perché la risposta alla sottoclasse è stata valutata in maniera più elevata di questa? Sicuramente non la sottoclasse è una risposta più semplice, più elegante? – fatuhoku

6
  1. creare una classe che è una classe secondaria di NSWindowController esempio NewWindowController
  2. Creare una finestra xib per la classe NewWindowController.
  3. Il pulsante codice scatto come:

    NewWindowController *controllerWindow = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"]; [controllerWindow showWindow:self];

Sì, ma la finestra si chiude, se questo codice è all'interno di alcuni func. Ecco la soluzione.

In blah.h

@interface blah : NSObject { 
    ... 
    NewWindowController *controllerWindow; 
    ... 
} 

In blah.m

@implementation 
... 
    -(IBAction)openNewWindow:(id)sender { 
     controllerWindow = [[NewWindowController alloc] initWithWindowNibName:@"You Window XIB Name"]; 
     [controllerWindow showWindow:self]; 
    } 
... 
+2

È preferibile aggiungere un commento alla risposta esistente (quando possibile) piuttosto che citarlo, rispondere e quindi postare il proprio. –

+1

@AdrianWragg, sì, sono il principiante, quindi mi dispiace per quello. – WildMassacre

+1

Bene ... e come posso chiudere il precedente? Questo codice mantiene aperte due finestre contemporaneamente. – mthama

5

Swift 3: Nel tuo storyboard andare WindowController -> Identità inspector -> storyBoardID: compilare: MainWindow. Poi dal viewcontroller corrente del circuito il pulsante sullo storyboard per il seguente metodo:

@IBAction func newWindow(_ sender: Any) { 
    let myWindowController = self.storyboard!.instantiateController(withIdentifier: "mainWindow") as! NSWindowController 
    myWindowController.showWindow(self) 
}