macOS显示窗口的方法
macOS显示窗口的方法

macOS显示窗口的方法

在macOS(AppKit)中,通常需要设置显示窗口的按钮,以下是常见的“显示窗口”方法。

常见的“显示窗口”方法

1、makeKeyAndOrderFront(_:)

window.makeKeyAndOrderFront(nil)

NSWindow方法,把窗口显示出来,如果该应用为当前应用,makeKeyAndOrderFront(nil)显示的窗口是活跃窗口。

如果用户正在使用其他的应用,那么makeKeyAndOrderFront(nil)只会把应用显示在前台,不会抢占焦点,这意味着可能会被其他应用阻挡在后面。

在实际应用中,通常配合NSApp.activate使用,让窗口抢占焦点,成为活跃窗口。

2、orderFront(_:)

window.orderFront(nil)

NSWindow方法,仅把窗口放到最前面(显示出来)。

和makeKeyAndOrderFront差别在于,如果该应用为当前应用,orderFront方法不会让窗口成为活跃窗口。

3、orderFrontRegardless()

window.orderFrontRegardless()

NSWindow方法,强制把窗口放到前面,但不会成为活跃窗口。

例如,当前应用为浏览器,orderFrontRegardless方法可以将应用推送到当前应用窗口的前面,但不会成为活跃窗口。

4、showWindow(_:)

NSWindowController().showWindow(nil)

NSWindowController方法,展示窗口。

5、NSApp.unhide(nil)

NSApp.unhide(nil)

配合hide(_:)使用,显示被隐藏的所有窗口。

使用示例

1、最常见的NSWindow前置并激活窗口

NSApp.activate(ignoringOtherApps: true)
window.makeKeyAndOrderFront(nil)

2、用NSWindowController管理

NSApp.activate(ignoringOtherApps: true)
self.showWindow(nil)

3、仅显示窗口,不激活

window.orderFront(nil)

4、强制显示窗口,不激活

window.orderFrontRegardless()

实际场景

某些截图工具,也会使用显示窗口,完成某个应用窗口的截图。

例如在使用iShot时,点击某个窗口,就会将窗口显示出来。

这里可能使用的是orderFrontRegardless方法,将窗口排序放到最前面,但不设置为活动窗口,因此截图应用可以截取该窗口的完整内容。

总结

在显示窗口时,从NSWindow、NSWindowController到NSApplication,有多种显示窗口的方法。

在实际应用中,显示窗口和活跃窗口并不相等。显示窗口只能将窗口显示出来,但是如果你在操作Word,那么Word就是你的活跃窗口。普通的窗口即使显示出来,也需要排在活跃窗口后面。

因此,对于普通的NSWindow来讲,需要配合NSApp.activate(…)方法,将窗口显示并激活:

NSApp.activate(ignoringOtherApps: true)
self.showWindow(nil)

NSApp.activate(…)方法可以让App成为活动应用,如果不设置为活动应用,那么只是显示一个窗口,并不能抢占焦点,无法实现真正的显示窗口。

扩展知识

1、macOS窗口NSWindow:https://fangjunyu.com/2025/07/01/macos%e7%aa%97%e5%8f%a3nswindow/

2、macOS核心对象NSApplication:

https://fangjunyu.com/2025/06/19/macos%e6%a0%b8%e5%bf%83%e5%af%b9%e8%b1%a1nsapplication/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注