9

別の NIB にウィンドウを配置し、独自の NSWindowController を与え、シートとしてスライドさせるにはどうすればよいですか?

(これはシートで行う典型的なことですか?)

メイン ウィンドウからカスタム シート (親ウィンドウのタイトル バーから下にスライドするウィンドウ) を表示しようとしています。私がやろうとしていることは標準だと思いますが、私がやりたいことを正確に行う方法についての明確な例や説明が見つかりません。

私がやろうとしていること:

  1. 私のアプリデリゲートは、「設定」シートを開くボタンがあるメインウィンドウを所有しています。
  2. 「設定」シート:
    • 別のNIBにあります。
    • NSWindowsController のサブクラスであるクラス SettingsWindowController に設定されたファイル所有者を持ちます
  3. ユーザーが「設定」をクリックすると、Apple の [サンプル コード] [1] を使用しようとしています。
- (void)showCustomSheet: (NSWindow *)window
// User has asked to see the custom display. Display it.
{
    if (!settingsSheet) 
    //Check the settingsSheet instance variable to make sure the custom sheet does not already exist.
        [NSBundle loadNibNamed:@"SettingsSheet" owner: self];
        //BUT HOW DOES THIS MAKE settingsSheet NOT nil?

    [NSApp beginSheet: settingsSheet
            modalForWindow: window 
            modalDelegate: self 
            didEndSelector: @selector(didEndSheet:returnCode:contextInfo:) 
            contextInfo: nil]; 

    // Sheet is up here.

    // Return processing to the event loop
} 

以下の単純で多数の質問をお許しください。

  • を呼び出すと、 になりloadNibName:owner:たくありません。これにより、アプリが「MyCustomSheet」の所有者を委任するためです。ただし、この方法で所有者を作成する方法がわかりません。ownerselfSettingsWindowsControllerSettingsWindowsController
  • シートで「起動時に表示」がチェックloadNibName:owner:されている場合、メイン ウィンドウからスライドするシートとしてではなく、ウィンドウを通常のウィンドウとしてすぐに表示します。
  • シートで「起動時に表示」がチェックされていない場合、beginSheet:modalForWindow:etc「モーダルセッションにはモーダルウィンドウが必要です」が発生します。これは、私が Nib の所有者を作成したためだと確信してselfいます (既に述べたように)。
  • サンプル コードでは、@"SettingsSheet" という名前の Nib がインスタンス変数にどのように "関連付け" されているかわかりませんが、コードが最初にチェックするため、settingsSheetどうやら関連しているif (!settingsSheet)ようです: (私はこれをコメントでマークしました//BUT HOW DOES THIS MAKE settingsSheet NOT nil?)

このすべてをお読みいただきありがとうございます。

4

1 に答える 1

10
  1. のインスタンスを作成しSettingsWindowController、使用しますinitWithWindowNibName:

  2. 起動時に表示したくありません。

  3. 1を参照してください。

  4. インスタンス変数が利用可能になりますSettingsWindowController

于 2011-06-21T20:12:40.033 に答える