1

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になるようなことをしていませんか? カスタム ビューの親ウィンドウを見つける良い方法はありますか? この問題を解決する方法について何か提案があれば、または私が間違っていることについてのヒントを教えていただければ幸いです。

ありがとう!乾杯、トロンド

4

1 に答える 1

2

「シートの紹介」ドキュメントの「ポジショニング シート」セクションをご覧ください。window:willPositionSheet:usingRect を使用して、ウィンドウのタイトル バーの下以外の場所からシートを表示する方法について説明します。

于 2012-10-09T03:24:30.280 に答える