2010-05-12 5 views
13

Je suis en train d'ouvrir un NSWindow en utilisant le code suivant:Comment ouvrir une fenêtre NSWindow et faire en sorte que la fenêtre soit sélectionnée et mise au point?

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

La fenêtre s'ouvre bien, mais la fenêtre précédente est toujours le mainWindow et la mise au point. J'ai essayé le code suivant pour forcer la fenêtre principale et cela ne fonctionne pas. La fenêtre a encore une barre de titre invalide et n'accepte pas les événements clés, etc.

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

La seule façon que je semble être en mesure d'obtenir la fenêtre précédente pour perdre le focus est si je ferme la fenêtre après avoir appelé showWindow: avec [[NSApp mainWindow] fermer];

Des idées?

+4

Je ne sais pas pourquoi j'ai reçu un -1 ici, quelqu'un m'a laissé savoir comment je pourrais améliorer la question? – Luke

Répondre

13

makeKeyAndOrderFront: est le chemin à parcourir. Etes-vous sûr que self.window et window référencent le même objet?

+0

Merci, mais cela ne fonctionne toujours pas. J'ai ajouté la [fenêtre makeKeyAndOrderFront: self]; appelez directement après le showWindow: et cela ne fonctionne toujours pas. Dois-je appeler cela ailleurs? – Luke

+0

'makeKeyAndOrderFront:' est la bonne méthode. Cela ne devrait pas avoir d'importance là où vous l'appelez. Quelque chose d'autre est le problème. Par exemple, la fenêtre principale peut être modale, ou quelque chose refuse d'abandonner le statut de premier répondeur. –

+1

Oui, il y avait un problème au sein de la plume, voir ma réponse pour la solution. – Luke

8

J'ai résolu le problème en affectant le WindowController au propriétaire de fichier nib, au lieu d'avoir un objet NSWindowController distinct dans la pointe.

+0

Je voudrais ajouter un point à cela, j'ai oublié de connecter la sortie de la fenêtre à mon NSWindow dans Interface Builder. Cela a conduit au code ne fonctionne pas pour moi, donc à quiconque lit ceci, n'oubliez pas de connecter la sortie de la fenêtre. Une erreur simple, mais qui peut vous frustrer depuis des lustres lol – Supertecnoboff

Questions connexes