将NSWindow设置为焦点窗口

7

我有一个应用程序,其中包含一个窗口和一个附加到该窗口的面板。

步骤:

  1. 停用我的应用程序(应用程序已打开,但没有焦点)
  2. 在面板上单击按钮(现在面板已获得焦点,但主窗口没有)

如何从面板设置焦点到主窗口(父窗口)?


主窗口是Cocoa主窗口吗?您的应用程序基于NSDocument吗?当您说焦点时,是否指的是关键窗口状态? - user557219
1
当我说“设置焦点”时,我的意思是“激活”主窗口,设置键窗口状态。应用程序始终在屏幕顶部。当我单击主窗口外的某个位置时,应用程序会停用,但仍然位于顶部。 - BUDDAx2
你使用 activateWithOptions: 的答案对我也有用。如果你把它作为答案发布,我很乐意点赞 :) - yuf
确保您的面板响应YES以成为关键窗口。 - Nick Moore
2个回答

12

以下是BUDDAx2所提供的Swift 5版本答案:

NSApplication.shared.activate(ignoringOtherApps: true)

10

您提到的“焦点”并不是很清楚,而且您所称的主窗口是否符合Cocoa定义中的主窗口也不确定。假设它是一个Cocoa的主窗口,并且焦点与键状态相同,

[[NSApp mainWindow] makeKeyWindow];

或者

[[NSApp mainWindow] makeKeyAndOrderFront:self];

如果不是Cocoa主窗口,您需要引用它并发送-makeKeyWindow-makeKeyAndOrderFront:


1
它不起作用。也许是因为主窗口是NSFloatingWindowLevel? - BUDDAx2
@BUDDAx2 主窗口有标题栏或调整大小的条吗?如果您向主窗口发送“-canBecomeKeyWindow”,返回值是什么? - user557219
-canBecomeKeyWindow返回true。 - BUDDAx2
3
我了解我需要什么:[[NSRunningApplication currentApplication] activateWithOptions: NSApplicationActivateIgnoringOtherApps]; 但我编译的应用程序是为10.6和10.5版本设计的,而NSRunningApplication类仅存在于10.6中。如何在10.5中实现? - BUDDAx2
我不知道为什么,但是[NSApp deactivate];做我需要的事情 :) - BUDDAx2
6
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; // "Available in OS X v10.0 and later."这段代码的意思是激活当前应用程序并将其置于其他应用程序之上,即使其他应用程序正在运行。注释中指出该方法适用于 Mac 操作系统版本 10.0 及更高版本。 - superlukas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接