1

ドキュメントベースの Cocoa アプリケーションに取り組んでいます。NSPanel起動時に、 「新規ドキュメントの作成」や「既存のドキュメントを開く」などの一般的なアクションのボタンを含む「ウェルカム パネル」(タイプ) がユーザーに表示されます。これらのアクションは、[ファイル] メニューの一致する項目と同様に、ファーストレスポンダーのnewDocument:およびアクションにそれぞれリンクされています。openDocument:

すべてが期待どおりに機能します... 3 つの注意事項があります。

  1. 新しいドキュメントを作成または開いたときにウェルカム パネルが閉じられません。
  2. ドキュメント ウィンドウは、作成時にフォーカスがありません。
  3. 開いているドキュメント ウィンドウでは、開いているファイルがウィンドウのタイトル バーに表示されません。同様に、期待どおりに、「無題」、「無題 2」、「無題 3」などのタイトルで新しいドキュメント ウィンドウが作成されません。(私がこれについて言及しているのは、それが煩わしいという理由だけでなく、何がうまくいかないのかについての洞察をもたらすかもしれないからです.)

アプリケーションコントローラーをウェルカムパネルのデリゲートにすることで、#1を部分的に解決しました。windowDidResignKey:[既存のドキュメントを開く] ボタンをクリックすると、(ファイル ブラウザー ダイアログが開かれているため) パネルはそのキー ステータスを辞任するので、デリゲートのメソッドでパネルを閉じることができます。ただし、新しいドキュメントを作成するときに、投稿された通知や呼び出されたデリゲート メソッドが見つからないため、新しいドキュメントを作成するときにパネルを閉じる方法がわかりません。そして最終的には、文書ウィンドウが作成されたときにフォーカスを得られないため、#2 は依然として問題です。

サブクラス化しただけNSDocumentです。カスタム ドキュメントやウィンドウ コントローラーはまったく使用していません。また、 の動作が異なる可能性がNSWindowあると考えて、パネルを に変更してみましたが、同じ問題が発生しています。NSWindow

4

2 に答える 2

0

カスタム ドキュメント コントローラを作成し、開始点パネルのコントローラを認識させ、 でウィンドウを非表示にし、addDocument:(他のドキュメントが残っていない場合) で再び表示しますremoveDocument:

これは、Adium Xtras Creatorで行ったことです。そのコードはBSD ライセンス(Adium 本体とは異なり) の下にあるため、必要に応じて借りることができます。

于 2010-05-14T09:29:20.087 に答える
0

ファーストレスポンダーのデフォルト アクションにリンクする代わりに、ウィンドウ コントローラーでカスタム アクション メソッドを作成し、それらのアクションをトリガーするようにボタンを設定します。このメソッドでは、ウェルカム ウィンドウを閉じてから、新しいドキュメントを作成する必要があります。

このようなもの:

- (IBAction)createNewDocument:(id)sender
{
    //this will close the window if you're using NSWindowController
    [self close];
    [[NSDocumentController sharedDocumentController] newDocument:sender];
}

または、ウェルカム ウィンドウに を使用していない場合はNSWindowController、ウィンドウに直接メッセージを送ることができます。

- (IBAction)createNewDocument:(id)sender
{
    //assume you have a "window" outlet connected to your welcome window
    [window orderOut:sender];
    [[NSDocumentController sharedDocumentController] newDocument:sender];
}
于 2010-05-14T00:22:06.623 に答える