【问题标题】:How to get multiple windows to perform the same menu item action?如何让多个窗口执行相同的菜单项操作?
【发布时间】:2021-03-13 22:15:39
【问题描述】:

我有一个支持多个窗口的Cocoa 应用程序。

我已经知道如何让主窗口对来自NSMenu 的任何NSMenuItem 执行操作,包括来自NSToolbarNSToolbarItem

class MainWindowController: NSWindowController {
    // ...
    @IBAction func doSomethingIncredible(_ sender: Any?) {
        // ...
    }
}

这对于单个窗口应用程序来说很容易,但我的应用程序支持多个窗口。

但是我怎样才能让除主窗口之外的其他窗口访问甚至验证来自NSMenuNSMenuItem

Safari 就是一个例子。它支持多个窗口。您可以选择打开位置...(⌘L)、新标签页(⌘T)、显示边栏(⇧⌘L)等。它在焦点窗口上执行操作。它不绑定到主窗口。它可以在任何窗口上完成。如何为我的应用执行此操作?

class AnotherWindowController: NSWindowController {
    // ...
    @IBAction func doSomethingIncredible(_ sender: Any?) {
        // ...
    }
}

MainWindowControllerAnotherWindowController 之一是来自NSMenuNSMenuItem 之一是关键焦点窗口时,它们如何执行相同的操作?

【问题讨论】:

    标签: swift cocoa appkit nswindowcontroller nsmenuitem


    【解决方案1】:

    而不是将菜单项硬连接到特定控制器,而是将其连接到 First Responder(红色立方体)。

    响应者链中响应选择器的第一个对象(通常是最前面的窗口)捕获并执行该操作。

    【讨论】:

    • 非常感谢!这使得在多个窗口的上下文中比单个窗口更好地理解第一响应者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多