这是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”......
答案 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]