別の NIB にウィンドウを配置し、独自の NSWindowController を与え、シートとしてスライドさせるにはどうすればよいですか?
(これはシートで行う典型的なことですか?)
メイン ウィンドウからカスタム シート (親ウィンドウのタイトル バーから下にスライドするウィンドウ) を表示しようとしています。私がやろうとしていることは標準だと思いますが、私がやりたいことを正確に行う方法についての明確な例や説明が見つかりません。
私がやろうとしていること:
- 私のアプリデリゲートは、「設定」シートを開くボタンがあるメインウィンドウを所有しています。
- 「設定」シート:
- 別のNIBにあります。
- NSWindowsController のサブクラスであるクラス SettingsWindowController に設定されたファイル所有者を持ちます
- ユーザーが「設定」をクリックすると、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」の所有者を委任するためです。ただし、この方法で所有者を作成する方法がわかりません。owner
self
SettingsWindowsController
SettingsWindowsController
- シートで「起動時に表示」がチェック
loadNibName:owner:
されている場合、メイン ウィンドウからスライドするシートとしてではなく、ウィンドウを通常のウィンドウとしてすぐに表示します。 - シートで「起動時に表示」がチェックされていない場合、
beginSheet:modalForWindow:etc
「モーダルセッションにはモーダルウィンドウが必要です」が発生します。これは、私が Nib の所有者を作成したためだと確信してself
います (既に述べたように)。 - サンプル コードでは、@"SettingsSheet" という名前の Nib がインスタンス変数にどのように "関連付け" されているかわかりませんが、コードが最初にチェックするため、
settingsSheet
どうやら関連しているif (!settingsSheet)
ようです: (私はこれをコメントでマークしました//BUT HOW DOES THIS MAKE settingsSheet NOT nil?
)
このすべてをお読みいただきありがとうございます。