2009-10-27 6 views
4

J'essaie d'ouvrir une fenêtre d'un autre en utilisant makeKeyAndOrderFront. La nouvelle fenêtre apparaît, mais ne reçoit pas le focus.makeKeyAndOrderFront ne fait que ce dernier

Le code de la fenêtre principale est:

#import "SecondWindowController.h" 
@implementation FirstWindowController 
-(IBAction)showSecondWindow:(id)sender 
{ 
    if (!secondWindowController) 
    secondWindowController = [[SecondWindowController alloc] init]; 
    [[secondWindowController window] makeKeyAndOrderFront:self]; 
} 

SecondWindowController est un NSWindowController, comme suit:

@implementation SecondWindowController 
-(id)init 
{ 
    if (![super initWithWindowNibName:@"SecondWindow"]) 
    return nil; 
    return self; 
} 

J'ai aussi essayé de mettre [secondWindowController showWindow:self] avant la makeKeyAndOrderFront, mais il ne fait pas une différence.

Répondre

8

Avez-vous vérifié que la fenêtre de sortie de SecondWindowController est connectée à la fenêtre de votre NIB? La fenêtre peut être affichée simplement en chargeant la NIB, même si la prise n'est pas branchée.

+0

Bon point! Cela pourrait certainement être le cas. – Leibowitzn

+0

Oui, vous l'avez. J'ai défini le délégué à l'objet propriétaire du fichier, mais n'a pas défini la fenêtre dans l'autre sens. Est-ce correct de changer la classe du propriétaire du fichier à SecondWindowController? – mattdwen

+0

Oui, définissez la classe du propriétaire du fichier sur SecondWindowController. –

2

Essayez ceci:

if (!secondWindowController) 
    secondWindowController = [[SecondWindowController alloc] init];  
NSApplication *thisApp = [NSApplication sharedApplication]; 
[thisApp activateIgnoringOtherApps:YES]; 
[[secondWindowController window] makeKeyAndOrderFront:self]; 
+0

Cela ne fait aucune différence, apparaît toujours en avant, mais sans mise au point. – mattdwen

+0

Oh, pas de focus? Que diriez-vous de [window makeFirstResponder: nil]? – psychotik

5

Utilisez-vous une fenêtre sans bordure? Si oui, vous devez surcharger canBecomeKeyWindow et retourner YES

+0

Je ne suis pas sûr de ce qu'est une fenêtre sans bordure, donc je n'en ai pas créé une intentionnellement. Toutefois, canBecomeKeyWindow renvoie NO. Pour surcharger cela, ai-je besoin de sous-classer NSWindow pour cette instance? – mattdwen

+0

Oui, vous devez remplacer la classe NSWindow. – Leibowitzn

+0

En fait, maintenant je pense que Doug Richardson a raison. Votre [fenêtre windowWindowController] est probablement nulle !!!!! – Leibowitzn