2009-07-12 11 views
7

複数のドキュメントを1つのウィンドウにタブ付きのインターフェイスで表示するアプリケーションを作成したいと思います。 NSDocumentアーキテクチャ(Cocoa Document-based Applicationテンプレート)を避けるべきですか?私が知る限り、それは1つの文書につき1つ以上のウィンドウしかサポートしませんが、その逆はできません。複数のドキュメントを1つのウィンドウでココア

私はしばらくこの問題に取り組んでおり、既にNSDocumentアーキテクチャ上で多くのアプリケーションを構築していますが、複数のドキュメントを1つのウィンドウに関連付ける良い方法を見つけることはできません。

編集:基本的なドキュメントウィンドウに加えて、プロジェクトドキュメントウィンドウが必要です。この複雑さのレベルでは、それでもNSDocumentアーキテクチャをハッキングする価値がありますか? AppleはNSDocumentアーキテクチャを使用してXcode(このように動作する)を作成しましたか?

+0

xcodeは実際にはNSDocumentを使用しているようですが、プロジェクト内に複数のタブがあるウィンドウは1つのドキュメント(プロジェクト) – cobbal

+1

でもあります。ココアのアプリでは、 Fスクリプトですhttp://www.fscript.org/ – cobbal

+0

@コーブル:面白いです。これは、テキストファイルがNSDocumentsとして表されていないことを意味しますか? – titaniumdecoy

答えて

3

数年前にNSDocumentアプリケーションを1つのウィンドウのタブ付きインターフェイスにshoehorningしようとしましたが、数ヶ月後にドキュメントアーキテクチャの部分をリファクタリングしてしまいました。それは不可能ではありませんが、多くの問題を回避して最終的な結果は、適切なNSDocumentアプリにほとんど似ていません。必要なビットを書き直すだけで、Cocoaフレームワークを破壊するだけのコードがたくさん作成されるのではないでしょうか。

+0

[ここの私のガイドから読む](http://cutecoder.org/programming/window-multiple-documents/)できるだけ多くのコードはありません。 – adib

4

この場合、NSDocumentベースのアーキテクチャを使用することは必ずしも悪い考えではありません。それはかなりのヘアーを必要とするかもしれません。

NSDocumentをサブクラス化するだけでなく、サブクラス化された兄弟NSDocumentControllerを使用することはまれです。これが完了したら、-makeWindowControllersや他のウィンドウ関連メソッドの呼び出しを回避して回避するのは簡単なことです。あなたが好きな方法でドキュメント "windows"をラップすることができますが、ベースのアプリケーションです。

2

まだ試していないが計画しているもう1つの手法は、各ドキュメントに対して枠なしのウィンドウを設けることです。このようにして、1つのドキュメントには1つのウィンドウが表示されます。

次に、実際のウィンドウ境界線と、境界線なしのドキュメントウィンドウ/ウィンドウを切り替えるコントロールを含むラッパーウィンドウを用意します。ドキュメントウィンドウは、ラッパーの子ウィンドウです。ウィンドウが移動/最小化/閉じられるときに両方がリンクされるようにします。

各枠なしのドキュメントウィンドウの場合、ラッパーウィンドウにはプレースホルダビューがあり、サイズ変更時にドキュメントウィンドウのサイズが変更され、ドキュメントウィンドウのビューがレスポンダチェーンに挿入されます(プレースホルダビューに送信されるイベントはプレースホルダの親ビューに渡される前にドキュメントウィンドウのビューに送信されます)。

まだ少し細かいことがありますが、このアプローチはうまくいくと思います。

+1

非常に興味深い提案。 – KPM

5

私は同じ種類のプロジェクトを持っています。つまり、1つのウィンドウに別の独立したドキュメントを入れ、サイドバーでドキュメントを切り替えることができます。

Cocoadev's Document Based App With One Window For All Documentsを参照して、面白い先を見つけました。 MikeTrentの答えから、NSDocumentを使うことは非常に実行可能な方法であることがわかります。 NSDocumentControllerのサブクラス化が必要です。

また、Abhi's ideaのように、ボーダーレスの子ウィンドウを使用することもできます。

+1

最初のリンクが壊れています – rraallvv

+1

リンクを修正しました。 – KPM

関連する問題