Question

Je veux écrire une application qui peut avoir plusieurs documents dans une seule fenêtre via une interface à onglets. Dois-je éviter l'architecture NSDocument (le modèle d'application à base de cacao document)? Pour autant que je peux dire, il ne supporte que une ou plusieurs fenêtre par document mais pas vice versa.

Je suis aux prises avec cette question pendant un certain temps et ont déjà construit une grande partie de mon application sur l'architecture NSDocument mais je ne peux pas trouver un bon moyen d'associer plusieurs documents avec une seule fenêtre.

EDIT: Je veux avoir des fenêtres de document de projet, en plus de fenêtres de documents de base. A ce niveau de complexité, serait-il encore la peine de piratage l'architecture NSDocument? Est-ce écrit d'Apple Xcode (qui fonctionne de cette façon) en utilisant l'architecture NSDocument?

Était-ce utile?

La solution

J'ai essayé shoehorning une application NSDocument dans une seule fenêtre interface à onglets il y a quelques années, et a fini par tellement frustré après quelques mois, je suis retourné et les pièces remaniée avec l'architecture de documents. Il est impossible, mais vous finissez par travailler autour de tant de problèmes que le résultat final ressemble à peine à une application correcte de NSDocument. Il est préférable de simplement réécrire les bits vous avez besoin, que finissent avec beaucoup de code juste pour subvertir les frameworks Cocoa.

Autres conseils

J'ai le même genre de projet - différents documents indépendants que je veux présenter dans une seule fenêtre, avec une barre latérale qui permet de basculer entre les documents - donc je l'ai fait un peu de moi-même chercher.

Je viens de découvrir une avance intéressante en lisant CocoaDev de document Based App Avec une fenêtre pour tous les documents référence. Il semble, d'après la réponse de MikeTrent, que l'utilisation NSDocument est un moyen très viable pour aller. Vous avez juste besoin NSDocumentController le sous-classement.

Je aime aussi l'idée de Abhi d'utiliser une fenêtre enfant sans frontières.

L'utilisation d'une architecture basée NSDocument est pas nécessairement une mauvaise idée dans ce cas; mais il peut exiger un peu de haquery.

Il est fort probable que vous aurez non seulement la sous-classe NSDocument, mais aussi il est plus rarement NSDocumentController sous-classé de frères et soeurs. Une fois cela fait, il devrait être une question simple à pirater et éviter les appels à -makeWindowControllers et d'autres méthodes liées à fenêtre, vous permettant d'envelopper le document « fenêtres » de quelque façon que vous s'il vous plaît, mais toujours conserver les avantages du document- application.

Une autre technique, que je ne l'ai pas encore essayé, mais l'intention de, est d'avoir une fenêtre sans marge pour chaque document. De cette façon, un seul document a une fenêtre, ce qui peut ou peut ne pas être visible.

Ensuite, une fenêtre d'emballage contenant la bordure de fenêtre réelle, et tout contrôle de basculer entre lesquels fenêtre de document / fenêtres sont sans frontières visibles. La fenêtre de document est une fenêtre enfant de l'emballage, ce qui assure à la fois sera lié lorsqu'une fenêtre est déplacée / réduit / fermé / etc.

Pour chaque fenêtre de document sans bordure, la fenêtre d'emballage a une vue d'espace réservé qui, redimensionnée, redimensionne la fenêtre du document, et injecter également la vue de la fenêtre de document dans la chaîne de répondeur (tout événement envoyé à la vue de l'espace réservé, sera envoyé à la vue de la fenêtre du document avant d'être transmis à la vue parent de l'espace réservé).

Il y a encore quelques petits détails à travailler, mais je pense que cette approche fonctionne bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top