Tengo una aplicación Cocoa que admite varias ventanas.

Ya sé cómo hacer que la ventana principal realice acciones para cualquiera de los NSMenuItem de NSMenu e incluyendo el NSToolbarItem de NSToolbar.

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

Eso es fácil para una aplicación de ventana única, pero mi aplicación es compatible con varias ventanas.

Pero, ¿cómo puedo hacer que otras ventanas además de la ventana principal accedan e incluso validen la NSMenuItem de NSMenu?

Un ejemplo de esto es Safari. Es compatible con múltiples ventanas. Puede seleccionar Abrir ubicación ... (⌘L), Nueva pestaña (⌘T), Mostrar barra lateral (⇧⌘L) , etc. Realiza la acción en la ventana enfocada. No está atado a la ventana principal. Se puede hacer en cualquier ventana. ¿Cómo puedo hacer esto para mi aplicación?

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

¿Cómo pueden el MainWindowController y el AnotherWindowController realizar la misma acción desde uno de los NSMenuItem de NSMenu cuando uno de ellos es la ventana de enfoque clave?

0
user10711707 14 mar. 2021 a las 01:15

1 respuesta

La mejor respuesta

En lugar de conectar el elemento del menú a un controlador específico, conéctelo al First Responder (el cubo rojo).

El primer objeto en la cadena de respuesta que responde al seclector, generalmente la ventana más frontal, captura la acción y la ejecuta.

1
vadian 13 mar. 2021 a las 22:22