0

カスタムモーダルウィンドウを作成しようとしていますが、これまでのコードは次のとおりです。

NSWindowController *modalSheet = [[NSWindowController alloc]
initWithWindowNibName:@"MyCustomWindow" owner:self];

[NSApp beginSheet:[modalSheet window]
 modalForWindow:[self windowForSheet]
  modalDelegate:nil
 didEndSelector:nil
    contextInfo:nil];

ウィンドウは正常にポップアップしますが、モーダルではありません。たとえば、リクエストの送信元である親ウィンドウに対して操作を実行できます。このメソッドは NSDocument オブジェクトから呼び出されます。

私は読んでみました:カスタム シートの使用

ただしmyCustomSheet、どこにも宣言されていないため、何が何であるかはわかりません。NSWindowインスタンス変数だと思います。

なぜモーダルではないのか理解できません。どんな助けでも大歓迎です。ありがとう

4

3 に答える 3

6

お役に立てれば。ウィンドウコントローラーを常にモーダルで実行するには。NSWindowController の独自のサブクラスを作成し、この 2 つのメソッドを追加します。

- (void)windowDidLoad
{
    [super windowDidLoad];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{//TODO
        [[NSApplication sharedApplication] runModalForWindow:self.window];
    });
}

- (void)windowWillClose:(NSNotification *)notification
{
    [[NSApplication sharedApplication] stopModal];
}
于 2015-03-20T12:21:01.783 に答える
3

Apple のウィンドウ プログラミング ガイドには、特にモーダル ウィンドウの使用に特化したセクションがあり、必要なほとんどすべてが説明されています。

于 2011-01-01T13:25:35.983 に答える
0

万が一、worksWhenModal設定されたことがありYESますか?それが目的であるため、これはあなたが説明する振る舞いを正確に引き起こします。

パネルを独自のウィンドウコントローラーでラップすること(NSPanelを使用していますよね?)に関しては、そうする必要はありません。私は実際にはウィンドウコントローラーなしでシートを作成しています。ウィンドウコントローラーに必要なカスタムロジックはありますか?AppKitが自動的に処理します。

于 2011-01-01T15:03:49.707 に答える