objective-c - 如何使主窗口在 Cocoa 中可见?

标签 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”...

最佳答案

首先,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/

相关文章:

cocoa - 将单页 pdf 显示为图像的最佳方式是什么?

ios - 如何检查记录是否存在于 SQLite 数据库中的表中?

objective-c - iOS Sprite Kit 如何在横向方向上使弹丸指向目标?

objective-c - 捕获组在 NSRegularExpression 中不起作用

iphone - 如何将代码转换为 Obj-C?

swift - 使用 Swift 替换文件系统中的文件夹

objective-c - 处理由于 iOS 通讯录 API 中的链接卡导致的重复联系人

objective-c - 在 NSCache 中使用 NSPurgeabledata 有什么意义?

macos - 您可以动态地将 CFBundleDocumentTypes 分配给您的 Cocoa 应用程序吗?

xcode - OpenGL 中的精度/单位