0

ツールバーの下に表示されるように、シートのようなウィンドウを開こうとしています。これを行うために、O'Reilly チュートリアルを使用しました。ただし、このエラーを回避できます: モーダル セッションにはモーダル ウィンドウが必要です。

「Visible At Launch」がチェックされている場合、ウィンドウはウィンドウとしてロードされます。

チェックされているかどうかにかかわらず、「モーダルセッションにはモーダルウィンドウが必要です」というエラーが表示されます。

Window.xib、ProgressModal.xib があります。

私が使用するウィンドウ実装ファイルでは:

-(IBAction)loadProgress:(id)sender{
    [self progressStatus:progressWindow];
}

- (void)progressStatus:(NSWindow *)window {

    [NSApp beginSheet: window
       modalForWindow: mainWindow
        modalDelegate: nil
       didEndSelector: nil
          contextInfo: nil];
    [NSApp runModalForWindow: window];
    [NSApp endSheet: window];
    [window orderOut: self];

}

- (IBAction)cancelProgressScrollView:(id)sender {
    [NSApp stopModal];
}

ProgressModal.xib の設定が間違っている可能性があります。クラスとして「ウィンドウ」を持つ NSObject があります。すべてのつながりはそれを通して作られています。

ただし、ウィンドウをロードしてもモーダルとしてロードされません。

何か案は?

4

3 に答える 3

3

progressStatusメソッドの最初の行に次のように記述します。

NSLog(@"%@", window);

ログ出力が null である場合は、それが理由です。

XIB を使用してモーダル シートを作成する手順:

  1. パネルを MainMenu.xib にドラッグします
  2. ファイル@property (assign) IBOutlet NSPanel *sheetPanel;に追加AppDelegate.h
  3. @synthesize sheetPanel = _sheetPanel;AppDelegate.mファイル内
  4. 手順 1 で作成した MainMenu.xib 内のパネルの新しい参照アウトレットを、手順 2 で作成した sheetPanel プロパティにリンクします。
  5. 次のコードを使用してモーダル シートを表示します。

    [NSApp beginSheet:_sheetPanel
       modalForWindow:_mainWindow
        modalDelegate:self
       didEndSelector:@selector(didEndSheet:returnCode:contextInfo:)
          contextInfo:nil];
    
于 2012-08-01T09:57:43.023 に答える
1

上で述べたように、progressModal ウィンドウでオブジェクトをドラッグし、それを介して接続を確立しました。私がすべきだったのは、ファイルの所有者を私の Window クラスにすることでした。それを変更すると、問題が修正されました。

http://www.youtube.com/watch?v=QBkO6TD-fWAからこれを入手しました

于 2012-07-30T23:38:05.887 に答える
0

編集:モーダルウィンドウが必要だと思いました。シートが必要な場合は、まったく使用runModalForWindow:しないでください。

これを試して:

[NSApp beginSheet: window
   modalForWindow: mainWindow
    modalDelegate: nil
   didEndSelector: nil
      contextInfo: nil];

ただし、必要な場合に備えて、コールバックを定義することをお勧めします。例えば

[NSApp beginSheet: window
   modalForWindow: mainWindow
    modalDelegate: self
   didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
      contextInfo: nil];
于 2012-07-30T00:56:49.830 に答える