这是 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”...
最佳答案
首先,Cocoa 中的“主窗口”并不像我想的那样。 The “main window” is the window that is active 。如果您没有订购任何窗口,则没有窗口是主窗口,并且 mainWindow
将返回 nil
;如果一个窗口是事件的,那么它是主窗口,但它不是一个被排序的窗口(如果是,它就不能是事件的)。
因此,您需要为您认为是主窗口的窗口创建一个导出。
isVisible
将告诉您该窗口是否已排序。如果它已排序(isVisible
返回 NO
),您将需要订购它。
当然,您不能只是按顺序排序,因为这不会指定您希望它具有的顺序。所以,您想将其订购前面。
但是,如果它没有用户焦点,也就是说,如果它不是键,那么将其设置为最前面的窗口就没有多大意义。因此,您希望将其设为关键并将其放在前面。
您将发送给它的消息是makeKeyAndOrderFront:
。使其成为关键也将使其成为主要。
关于objective-c - 如何使主窗口在 Cocoa 中可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563620/