Frage

Ich möchte eine Anwendung schreiben, die mehrere Dokumente in einem einzigen Fenster über eine Oberfläche mit Registerkarten haben. Sollte ich die NSDocument Architektur (die Cocoa Document-basierte Anwendungsvorlage) vermeiden? Soweit ich sagen kann, es unterstützt nur ein oder mehr Fenster pro Dokument aber nicht umgekehrt.

Ich habe eine Zeit lang mit dieser Frage gerungen und habe schon viel von meiner Anwendung auf der NSDocument Architektur gebaut, aber ich kann nicht einen guten Weg finden, um mehrere Dokumente mit einem einzigen Fenster zu verknüpfen.

EDIT: Ich möchte Projektdokumentfenster zusätzlich zu den Grunddokumentfenster haben. Auf dieser Ebene der Komplexität, wäre es immer noch wert sein, die Architektur NSDocument Hacking? Hat Apple-schreibt Xcode (die auf diese Weise arbeitet) mit der NSDocument Architektur?

War es hilfreich?

Lösung

Ich habe versucht, eine NSDocument App in einem einzigen Fenster shoehorning Oberfläche mit Registerkarten vor ein paar Jahren und endete so frustriert nach ein paar Monaten ging ich zurück und Refactoring aus der Dokumentenstruktur Stücke. Es ist nicht unmöglich, aber man am Ende um so viele Probleme arbeiten, die das Endergebnis kaum eine richtige NSDocument App ähnelt. Es ist besser, nur die Bits neu schreiben Sie müssen, als nur mit viel Code am Ende auf die Cocoa-Frameworks zu untergraben.

Andere Tipps

Ich habe die gleiche Art von Projekt - verschiedene unabhängige Dokumente, die ich in einem einzigen Fenster präsentieren will, mit einer Seitenleiste, die zwischen Dokumenten Schalten ermöglicht - so habe ich ein wenig die Suche selbst getan.

Ich habe gerade eine interessante Führung durch CocoaDev der Dokument Based App mit einem Fenster für alle Dokumente Referenz. Es scheint, aus MikeTrent Antwort, dass NSDocument mit einem sehr praktikable Weg zu gehen. Sie müssen nur NSDocumentController Subklassen.

Ich mag auch Abhi Idee ein randloses Kind Fenster verwenden.

Unter Verwendung eine NSDocument-basierte Architektur ist nicht unbedingt eine schlechte Idee, in diesem Fall; aber es könnte ziemlich viel haquery erfordern.

Es ist sehr wahrscheinlich, dass Sie nicht nur Unterklasse NSDocument haben, aber auch mehr es selten Geschwister NSDocumentController subclassed. Sobald dies geschehen ist, sollte es eine einfache Sache sein, um Anrufe zu -makeWindowControllers und andere Fenster bezogenen Methoden kapern und zu vermeiden, so dass Sie das Dokument „Fenster“ wickeln in irgendeiner Art und Weise Sie bitte, aber immer noch die Vorteile des Dokumenten- behalten basierte Anwendung.

Ein andere Technik, die ich noch nicht versucht, aber plane, ist für jedes Dokument ein randloses Fenster zu haben. So kann ein Dokument hat ein Fenster, das nicht sichtbar ist oder nicht.

Dann haben Sie ein Wrapper-Fenster den eigentlichen Fensterrand enthalten, und alle Steuerelemente, zwischen denen randlos Dokumentfenstern / Fenster sind sichtbar zu schalten. Das Dokumentfenster ist ein untergeordnetes Fenster des Umschlags, der wird gewährleistet, beide verbunden werden, wenn ein Fenster bewegt / minimiert / geschlossen / etc.

Für jedes randlos Dokumentfenster, das Wrapper-Fenster einen Platzhalter Ansicht hat, die, wenn der Größe verändert, wird das Dokumentfenster skalieren und injizieren auch die Ansicht des Dokumentfensters in die Responder-Kette (jedes Ereignis auf den Platzhalter Ansicht gesendet werden, gesendet werden der Ansicht des Dokumentfensters, bevor auf die übergeordnete Ansicht weitergegeben werden die Platzhalter).

Es gibt noch einige kleinere Details zur Arbeit, aber ich denke, dieser Ansatz wird gut funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top