cocoa - MĂșltiples documentos en una sola ventana en cacao
nsdocument document-based (4)
Usar una arquitectura basada en NSDocument no es necesariamente una mala idea en este caso; pero podría requerir un poco de haquery.
Es bastante probable que no solo deba subclasificar NSDocument, sino que también sea más raramente el NSDocumentController subclasificado. Una vez hecho esto, debería ser una cuestión simple secuestrar y evitar llamadas a -hacer WindowsControllers y otros métodos relacionados con las ventanas, lo que le permite ajustar las "ventanas" del documento de la forma que desee, pero aún así conservar los beneficios del documento- aplicación basada
Quiero escribir una aplicación que puede tener múltiples documentos en una sola ventana a través de una interfaz con pestañas. ¿Debería evitar la arquitectura de NSDocument (la plantilla de la aplicación basada en el documento Cocoa)? Hasta donde puedo decir, solo admite una o más ventanas por documento, pero no viceversa.
He estado luchando con esta pregunta por un tiempo y ya he desarrollado gran parte de mi aplicación en la arquitectura NSDocument pero no puedo encontrar una buena manera de asociar varios documentos con una sola ventana.
EDITAR: Quiero tener ventanas de documentos de proyecto además de ventanas de documentos básicos. En este nivel de complejidad, ¿valdría la pena seguir pirateando la arquitectura de NSDocument? ¿Escribió Apple Xcode (que funciona de esta manera) utilizando la arquitectura NSDocument?
Intenté calzar una aplicación de NSDocument en una interfaz con pestañas en una sola ventana hace unos años, y terminé tan frustrado después de unos meses que volví y refactoreé las piezas de la arquitectura del documento. No es imposible, pero terminas trabajando en tantos problemas que el resultado final apenas se parece a una aplicación NSDocument adecuada. Es mejor reescribir los bits que realmente necesitas, que terminar con un montón de código solo para subvertir los frameworks de Cocoa.
Otra técnica, que aún no lo he intentado pero que pretendo, es tener una ventana sin bordes para cada documento. De esta forma, un documento tiene una ventana, que puede o no ser visible.
Luego, tenga una ventana contenedora que contenga el borde de la ventana real y cualquier control para cambiar entre qué ventana / ventana de documentos sin bordes están visibles. La ventana del documento es una ventana secundaria del contenedor, lo que garantiza que ambos se vincularán cuando se mueva / minimice / cierre / etc.
Para cada ventana de documento sin bordes, la ventana contenedora tiene una vista de marcador de posición que, al cambiar de tamaño, cambiará el tamaño de la ventana del documento y también inyectará la vista de la ventana del documento en la cadena de respuesta (cualquier evento enviado a la vista de marcador de posición se enviará al documento la vista de la ventana antes de pasarla a la vista padre del marcador de posición).
Todavía hay algunos detalles menores para resolver, pero creo que este enfoque funcionará bien.
Tengo el mismo tipo de proyecto, diferentes documentos independientes que quiero presentar en una sola ventana, con una barra lateral que permite cambiar de un documento a otro, así que he hecho un poco de búsqueda.
Acabo de encontrar una pista interesante al leer la aplicación de Cocoadev basada en documentos con una ventana para todos los documentos . Según la respuesta de MikeTrent, parece que utilizar NSDocument es una forma muy viable de hacerlo. Solo necesita subclasificar NSDocumentController.
También me gusta la idea de Abhi de usar una ventana secundaria sin bordes.