cocoa - una - ventana de windows y sus partes
¿Cuál es una buena manera de enlazar desde una ventana de utilidad compartida y la ventana de documentos más avanzada? (5)
- pongo un controlador de objetos en mi plumilla para la ventana compartida. Cuando una ventana de documento cambia el estado frontal, cambie el contenido de ese enlace.
Eso tiene más sentido para mí. Cambiaría el contenido a la instancia del documento ( [NSDocumentController currentDocument]
).
Una desventaja de esto es que si tuviese otro tipo de ventana de utilidad, ¡tendría que recordar conectar las vinculaciones desde la ventana del documento a esa ventana de la herramienta también!
¿Huh? No entiendo esto.
Tengo una aplicación que permite que múltiples NSDocuments estén abiertos. En esta aplicación hay una sola ventana de utilidad que contiene algunas funcionalidades que deseo aplicar al documento más avanzado.
Estoy tratando de usar enlaces aquí, por lo que el truco es cómo vincular limpiamente la interfaz de usuario de la ventana de la utilidad con el documento más adelantado. El objetivo es que luego al cambiar la ventana del documento más adelante se actualice la vista en la ventana de la utilidad; los controles que están ligados a las propiedades del modelo del documento más avanzado se actualizarían apropiadamente cuando el estado cambie en el modelo del documento, etc.
Para enviar acciones desde dicha ventana, es fácil simplemente usar el primer respondedor; el objeto del documento puede interceptar acciones a través de la cadena de respuesta. Pero quiero más que esto, y por supuesto no puedes vincular al primer respondedor.
Algunas ideas que tengo:
- pongo un controlador de objetos en mi plumilla para la ventana compartida. Cuando una ventana de documento cambia el estado frontal, cambie el contenido de ese enlace. Una desventaja de esto es que si tuviese otro tipo de ventana de utilidad, ¡tendría que recordar conectar las vinculaciones desde la ventana del documento a esa ventana de la herramienta también!
- Cree un descriptor de acceso en el delegado de la aplicación que obtiene la ventana frontal del documento al recorrer la lista de ventanas. La ventana de mi utilidad simplemente se enlazaría a través del método del delegado de la aplicación. Una desventaja aquí es que no es compatible con KVO
- Tener un getter y un setter en el delegado de la aplicación para determinar (y tal vez establecer que sea compatible con KVO? ¿Tendría sentido?) El documento más avanzado. Quizás las notificaciones de ventana de uso establezcan un ivar al valor apropiado cuando una ventana pierde el estado principal. Actualización: estoy usando esto por ahora, y en realidad parece bastante limpio. Establecí el valor de la notificación windowDidBecomeMain de mi ventana de documento y la borré (si es el valor actual) en windowWillClose . A menos que haya una gran objeción, este es probablemente el enfoque que usaré.
- Una idea era enlazar a mainWindow.windowController.document ... esto se acerca, excepto que cuando mi ventana compartida se convierte en main, este enlace desaparece. De modo que realmente necesito encontrar el controlador de la ventana del documento más adelantado (y de la clase correcta).
Ninguno de estos parece bastante correcto. ¿Hay alguna manera mejor de hacer esto que me estoy perdiendo?
Siempre me he vinculado a través de Shared Application, mainWindow.document
, que funciona bien. si tiene Windows sin documentos, es posible que desee agregar una clave mainYourKindOfWindow
que se implemente viendo mainWindow
y actualizando el valor en función de algunos criterios de filtro.
Leopard''s TextEdit hace esto por su inspector. Compruébelo en el archivo: /// Developer / Examples / AppKit / TextEdit.
Leopard''s TextEdit hace esto por su inspector. Compruébelo en> file: /// Developer / Examples / AppKit / TextEdit.
En TextEdit, los valores del inspector están vinculados a través de un controlador de objeto intermedio. El objeto de contenido del controlador está vinculado a la aplicación principal mainWindow.
Puede vincular el contenido a mainWindow.firstResponder y desmarcar "Aumentos para las claves no aplicables".
Use la ventana de la llave, no la ventana principal. Puede que KVO no sea compatible con la propiedad keyWindow de NSApplication, pero aún puede usar NSNotifications si no funciona. La razón de esto es que currentDocument de NSDocumentController usa la ventana clave, por lo que representa mejor la funcionalidad incorporada. Además, los paneles se pueden configurar para evitar convertirse en ventana clave.