如何在Cocoa中显示主窗口?

时间:2009-10-14 00:05:22

标签: objective-c cocoa

这是this question的后续行动。我有以下代码:

- (BOOL)applicationShouldHandleReopen:(NSApplication *)app hasVisibleWindows:(BOOL)flag {
    NSLog(@"Has visible windows: %d, main window visible: %d", flag, [[app mainWindow] isVisible]);
    if (!flag) {
        // I need to make mainWindow visible again here. HOW???
        // I tried the following but it has no effect.
        // [[app mainWindow] makeKeyAndOrderFront:self];
        return NO;
    } else {
        return YES;
    }
}

我可以使用[window isVisible]消息查询,但没有相应的setVisible或“show”......

3 个答案:

答案 0 :(得分:8)

首先,Cocoa中的“主窗口”并不代表我认为你的意思。 The “main window” is the window that is active。如果您没有订购任何窗口,则主窗口没有窗口,mainWindow将返回nil;如果一个窗口处于活动状态,它就是主窗口,但它不是一个订购的窗口(如果是,它可能不是活动的)。

因此,您需要为认为是主窗口的窗口创建一个插座。

isVisible会告诉您该窗口是否已订购。如果订购了该窗口(isVisible返回NO),您需要订购该窗口。

当然,您不能只在中订购,因为这不会指定您希望它具有的顺序。所以,你想订购它前面

但是,如果它没有用户关注点 - 即,如果它不是,那么将它作为最前面的窗口并不重要。所以,你想把它作为关键在前面订购。

您要发送的邮件是makeKeyAndOrderFront:。使它成为关键也将使它成为主要。

答案 1 :(得分:2)

假设您实际上有一个主窗口,并且由于某种原因它刚刚被排除,请使用makeKeyAndOrderFront:。不过,我敢打赌,你没有一个可以与之交谈的主窗口,所以你要么想要一个窗口你要引用或打开一个新窗口。

答案 2 :(得分:1)

[[app mainWindow] makeKeyAndOrderFront:self]