0

我正在尝试打开一个像工作表一样的窗口,以便它出现在工具栏下方。我已经使用 O'Reilly 教程来做到这一点。但是,我可以克服这个错误:Modal session requires modal window。

如果我选中了“启动时可见”,则该窗口将作为窗口加载。

无论是否选中,我都会收到“模态会话需要模态窗口”错误。

我有一个Window.xib,ProgressModal.xib。

在我使用的 Window 实现文件中:

-(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,其中有“Window”作为它的类。所有的联系都是通过它建立的。

但同样,它加载窗口只是不会将其作为模式加载。

有任何想法吗?

4

3 回答 3

3

将以下内容放在progressStatus方法的第一行:

NSLog(@"%@", window);

如果您看到日志输出为空,这就是原因。

使用 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 窗口中拖动一个对象并通过它建立我的连接。我应该做的是让文件的所有者成为我的窗口类。改变它解决了这个问题。

我从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 回答