Je veux écrire une application qui peut avoir plusieurs documents dans une seule fenêtre via une interface à onglets. Devrais-je éviter l'architecture NSDocument (le modèle de demande de documents de cacao)? Pour autant que je sache, cela ne supporte qu'une ou plusieurs fenêtres par document mais pas vice versa. P>
J'ai eu la lutte avec cette question pendant un moment et j'ai déjà construit une grande partie de ma demande sur l'architecture Nsdocument, mais je ne peux pas comprendre un bon moyen d'associer plusieurs documents avec une seule fenêtre. P>
Edit: Je veux avoir des fenêtres de document de projet en plus des fenêtres de base du document. À ce niveau de complexité, cela vaut-il toujours la peine de pirater l'architecture Nsdocument? Apple écrit Xcode (qui fonctionne de cette façon) en utilisant l'architecture NSDocument? P>
4 Réponses :
L'utilisation d'une architecture basée sur la NSDocument n'est pas nécessairement une mauvaise idée dans ce cas; Mais cela pourrait nécessiter un peu de haqueuse. p>
Il est fort probable que vous devriez avoir à non seulement la sous-classe Nsdocument, mais aussi, c'est plus rarement sous-classé, nsdocumentController. Une fois que cela est fait, il devrait s'agir d'une simple affaire de détournement et d'éviter les appels à -MakeWindowControlers et à d'autres méthodes liées à la fenêtre, vous permettant de envelopper le document "Windows" de la mode de la mode, mais conserver toujours les avantages du document- application basée. p>
J'ai essayé de chaussures d'une application Nsdocument dans une interface à onglets à une seule fenêtre il y a quelques années, et a fini si frustré après quelques mois, je suis retourné et j'ai refactorisé les pièces d'architecture de documents. Ce n'est pas impossible, mais vous finissez par travailler autour de tant de problèmes que le résultat final ressemble à peine à une application NSDocument appropriée. Il vaut mieux de réécrire les bits dont vous avez besoin, de vous retrouver avec beaucoup de code juste pour subvertir les cadres de cacao. P>
Ce n'est pas vraiment beaucoup de code que vous pouvez lire depuis mon guide ici .
Une autre technique, que je n'ai pas encore essayé mais que vous prévoyez d'avoir une fenêtre sans frontière pour chaque document. De cette façon, un document a une fenêtre, qui peut être visible ou non. P>
Ensuite, faites une fenêtre d'emballage contenant la bordure de la fenêtre réelle et toutes les commandes permettant de basculer entre les fenêtres de document sans bordure / fenêtres sont visibles. La fenêtre du document est une fenêtre enfant de l'emballage, qui garantit les deux sera liée lorsqu'une fenêtre est déplacée / minimisée / fermée / etc. P>
Pour chaque fenêtre de document sans bordure, la fenêtre d'emballage a une vue d'espace réservé qui, lorsqu'elle est redimensionnée, redimensionnez la fenêtre du document et injection de la vue de la fenêtre du document dans la chaîne du 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é). P>
Il y a encore des détails mineurs pour s'entraîner, mais je pense que cette approche fonctionnera bien. P>
J'ai le même type de projet - Différents documents indépendants que je souhaite présenter dans une seule fenêtre, avec une barre latérale qui permet de passer entre les documents - donc j'ai fait un peu de recherche de moi-même. p>
Je viens de trouver un avantage intéressant en lisant J'aime aussi L'idée d'Abhi d'utiliser une fenêtre enfant sans bordure. p>
Le premier lien est cassé
Peut-être qu'ils étaient en mai, mais maintenant ils travaillent bien.
Il semble que Xcode utilise effectivement nsdocument, mais la fenêtre qui contient les multiples onglets du projet n'est qu'un seul document (les projets)
En outre, un outil très amusant pour fouiller dans les applications de cacao pour voir comment ils le font est F-script fscript.org a>
@Cobal: intéressant. Est-ce que cela implique que les fichiers texte ne sont pas représentés comme nsdocuments?