如何在Cocoa中显示主窗口?

Jaa*_*nus 1 cocoa objective-c

这是这个问题的后续问题.我有以下代码:

- (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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*sey 8

首先,Cocoa中的"主窗口"并不意味着我认为你的意思."主窗口"是活动的窗口.如果您没有订购任何窗户,那么主窗口就没有窗户,并且mainWindow会返回nil; 如果一个窗口处于活动状态,它就是主窗口,但它不是一个被命令的窗口(如果它是,它可能不是活动的).

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

isVisible会告诉你该窗口是否已订购.如果订购了(isVisible退货NO),您需要订购.

当然,您不能只是订购它,因为这不会指定您希望它具有的订单.所以,你想订购.

但如果没有用户关注,那么将其作为最前面的窗口并不重要 - 也就是说,如果它不是关键.因此,您希望将其设为关键并将其排序.

你要发送它的消息是makeKeyAndOrderFront:.使它成为关键也将使它成为主要.