@main
struct SomeApp: App
{
@Environment(\.openWindow) private var openWindow
@State private var appController = AppController()
var body: some Scene
{
Window("SomeApp", id: SomeApp.mainWindowIdentifier) {
MainWindowRootView()
.environment(appController)
}
Window("Log", id: SomeApp.logWindowIdentifier) {
LogWindowRootView()
}
}
}
问题
openWindow(id:)
打开日志窗口。但是我想要的是我在appkit中拥有的东西:
:
NSWindowController
确保如果日志窗口已经部分可见(即用户将其放在屏幕上的其他一些窗口后面,但至少可以看到一部分),那么它不会跳到前面并窃取焦点。这是一个很小的细节,但它使该应用程序成为Macos的更愉快的公民。在纯Swiftui中有类似的方法可以实现这一目标吗?我希望只有在完全遮住的情况下才能打开(成为键)。 遵循与AppKit中相同的行为可能有点棘手
,但是,我们可以尝试创建一个自定义
if showWindow && !(window?.occlusionState.contains(.visible) ?? false)
{
self.showWindow(self)
}
来管理日志窗口。
NSWindowController
NSWindowController
与Swiftui应用结构集成:
import Cocoa
class LogWindowController: NSWindowController {
static let shared = LogWindowController(windowNibName: "LogWindow")
func showIfNeeded() {
if let window = self.window, !window.occlusionState.contains(.visible) {
self.showWindow(nil)
}
}
}
至少,您可以控制日志窗口的可见性,而不会窃取焦点,如果它已经部分可见。
,这只是一项工作,这可能不是完全合适的。希望它有帮助