OSX NSApplicationDelegate 用に NSWindow (メインウィンドウ) が 1 つあります。NSWindow は、NSViewControllers を使用してコンテンツが設定される複数の NSView も保持します。現在、シートである NSPanel を NSViews の 1 つの上部から (アプリの上部からではなく) ドロップダウンさせたいときに問題が発生しました。私はコードを使いたかった:
[NSApp beginSheet:self.loginSheet.window
modalForWindow:self.view.window
modalDelegate:self
didEndSelector:nil
contextInfo:nil];
loginSheet は、次を使用して xib ファイルをロードする NSWindowController のサブクラスです。
loginSheet = [[sheetWindowController alloc] initWithWindowNibName:@"loginSheet"];
ただし、NSViewController からこのコードを実行すると、self.view.window は常に nil になります。それ以外の場合、NSView は正しく初期化され、正常に動作しているように見えますが、modalForwindow (self.view.window) が nil であるため、シートのドロップダウンが機能しません。コードを使用する場合:
[NSApp beginSheet:self.loginSheet.window
modalForWindow:[[NSApplication sharedApplication] mainWindow]
modalDelegate:self
didEndSelector:nil
contextInfo:nil];
それは魅力のように機能します。しかし、私の問題に対する答えを見つけるためのすべての検索から、この作業アプローチは、アプリ全体の応答をブロックするため、まったく問題ないようです。シートを NSView の 1 つにリンクしたかったのですが、アプリに NSWindow が 1 つしかないため、これを行う方法がわかりません。私は自分のself.view.windowがnilになるようなことをしていませんか? カスタム ビューの親ウィンドウを見つける良い方法はありますか? この問題を解決する方法について何か提案があれば、または私が間違っていることについてのヒントを教えていただければ幸いです。
ありがとう!乾杯、トロンド