在 Mac Catalyst 中访问 NSWindow

nse*_*ror 6 macos ios swift mac-catalyst

我知道 NSWindow 在 Mac Catalyst 中并未正式可用,但我已经看到了一些通过NSClassFromString和访问它的帖子和成功案例valueForKeyPath。然而,我从来没能让它发挥作用,因为它总是返回零。

guard let nsWindows = NSClassFromString("NSApplication")?.value(forKeyPath: "sharedApplication.windows") as? [AnyObject] else {
    return nil
}
Run Code Online (Sandbox Code Playgroud)

也曾在目标c中尝试过

NSArray *const nsWindows = [NSClassFromString(@"NSApplication") valueForKeyPath:@"sharedApplication.windows"];
Run Code Online (Sandbox Code Playgroud)

但每次都是相同的结果 - 零。

是否有一个技巧可以让它发挥作用,或者这种方式作为访问它的潜在方式已被关闭?成功获取NSApplication实例。但 windows 属性始终为零。

Hej*_*azi 5

这可以在Dynamic的帮助下轻松完成:

extension UIWindow {
    var nsWindow: NSObject? {
        var nsWindow = Dynamic.NSApplication.sharedApplication.delegate.hostWindowForUIWindow(self)
        if #available(macOS 11, *) {
            nsWindow = nsWindow.attachedWindow
        }
        return nsWindow.asObject
    }
}
Run Code Online (Sandbox Code Playgroud)