Pregunta

Quiero escribir una aplicación que pueda tener varios documentos en una sola ventana a través de una interfaz con pestañas.¿Debo evitar la arquitectura NSDocument (la plantilla de aplicación basada en documentos Cocoa)?Por lo que puedo decir, sólo admite una o más ventanas por documento, pero no al revés.

He estado luchando con esta pregunta por un tiempo y ya he creado 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.Con este nivel de complejidad, ¿valdría la pena hackear la arquitectura NSDocument?¿Apple escribió Xcode (que funciona de esta manera) usando la arquitectura NSDocument?

¿Fue útil?

Solución

He intentado shoehorning una aplicación NSDocument en una sola ventana de interfaz con pestañas hace unos años, y terminó tan frustrado después de unos meses volví y refactorizado las piezas de arquitectura de documento. No es imposible, pero que terminan trabajando en torno a tantos problemas que el resultado final apenas se parece a una aplicación adecuada NSDocument. Es mejor simplemente volver a escribir los bits que lo necesita, que termina con una gran cantidad de código sólo para subvertir los marcos de cacao.

Otros consejos

Tengo el mismo tipo de proyecto - diferentes documentos independientes que quiero presentar en una sola ventana, con una barra lateral que permite cambiar entre documentos - por lo que he hecho un poco de búsqueda de mí mismo.

acabo de encontrar una pista interesante mediante la lectura de Cocoadev Documento basado en la aplicación con una ventana para todos los documentos de referencia. Parece, a partir de la respuesta de MikeTrent, que el uso de NSDocument es una forma muy viable para ir. Sólo se necesita la subclasificación NSDocumentController.

También me gusta la idea de Abhi para utilizar una ventana secundaria sin fronteras.

El uso de una arquitectura basada en NSDocument no es necesariamente una mala idea en este caso; pero podría requerir un poco de haquery.

Es muy probable que usted tendrá que no sólo subclase NSDocument, sino que también es más rara subclase hermanos NSDocumentController. Una vez hecho esto, debería ser una simple cuestión de secuestrar y evitar las llamadas a -makeWindowControllers y otros métodos relacionados con ventanas, lo que le permite envolver el documento "ventanas" de cualquier manera que usted quiera, pero aún conservan las ventajas del documento- aplicación basada.

Otra técnica, que no he probado todavía, pero planea, es tener una ventana sin fronteras para cada documento. Este documento forma tiene una ventana, que pueden o no ser visible.

A continuación, tener una ventana envoltorio que contiene el borde de la ventana real, y los controles para cambiar entre los cuales ventana documento sin bordes / ventanas son visibles. La ventana de documento es una ventana secundaria de la envoltura, lo que asegura tanto se vinculará cuando se mueve una ventana / minimizada / cerrado / etc.

Para cada ventana de documento sin bordes, la ventana de envoltura tiene una vista marcador de posición que, cuando se cambia de tamaño, será cambiar el tamaño de la ventana del documento, y también inyectar punto de vista de la ventana del documento en la cadena de respuesta (cualquier evento enviado a la vista de marcador de posición, será enviada a la vista de la ventana del documento antes de pasar a la vista de los padres del marcador de posición).

Todavía hay algunos detalles menores para trabajar, pero creo que este enfoque funciona bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top