2010-05-12 6 views
13

Ich versuche, ein NSWindow mit dem folgenden Code zu öffnen:Wie öffne ich ein NSWindow und habe das Fenster ausgewählt und scharfgestellt?

NSWindowController *window = [[NSWindowController alloc] initWithWindowNibName:@"MainWindow"]; 
[window showWindow:nil]; 

Das Fenster öffnet sich in Ordnung, aber das vorherige Fenster ist immer noch das Hauptfenster und im Mittelpunkt stehen. Ich habe den folgenden Code ausprobiert, um das Hauptfenster zu erzwingen und es funktioniert nicht. Das Fenster hat noch ein behindertes Titelleiste und nimmt keine Schlüsselereignisse usw.

[self.window makeKeyAndOrderFront:self]; 
[self.window makeMainWindow]; 

Der einzige Weg, ich scheine das vorherige Fenster zu bekommen, um die Lage sein, den Fokus zu verlieren, wenn ich das Fenster nach dem Aufruf von Showwindow zu schließen: mit [[NSApp mainWindow] schließen];

Irgendwelche Ideen?

+4

Nicht sicher, warum ich hier eine -1 erhalten habe, ließ mich jemand wissen, wie ich die Frage verbessern könnte? – Luke

Antwort

13

makeKeyAndOrderFront: ist der Weg zu gehen. Sind Sie sicher, dass sich self.window und window auf dasselbe Objekt beziehen?

+0

Danke, aber es funktioniert immer noch nicht. Ich habe das [window makeKeyAndOrderFront: self] hinzugefügt; Anruf direkt nach dem showWindow: und es funktioniert immer noch nicht. Soll ich das woanders anrufen? – Luke

+0

'makeKeyAndOrderFront:' ist die richtige Methode. Es sollte egal sein, wo du es nennst. Etwas anderes ist das Problem. Zum Beispiel könnte das Hauptfenster modal sein, oder etwas weigert sich, den Erstbeantwortungsstatus aufzugeben. –

+1

Ja, es gab ein Problem innerhalb der Feder, siehe meine Antwort für die Lösung. – Luke

8

Ich löste das Problem, indem ich den WindowController dem Nib File Owner zuordnete, anstatt ein separates NSWindowController-Objekt innerhalb der Nib zu haben.

+0

Ich möchte einen Punkt hinzufügen, ich habe vergessen, den Fensterauslass mit meinem NSWindow in Interface Builder zu verbinden. Dies führte dazu, dass der Code für mich nicht funktionierte. Also sollte jeder, der dies liest, nicht vergessen, den Fensterausgang anzuschließen. Ein einfacher Fehler, aber einer, der dich ewig frustrieren kann, lol – Supertecnoboff