我正在尝试像张纸一样打开一个窗口,以便它显示在工具栏下方。我已经使用了O'Reilly教程来做到这一点。但是,我可以通过此错误:模态会话需要模态窗口。

如果我在选中,则窗口将作为窗口加载。

是否被检查,我得到“模态会话需要模态窗口”错误。

我有一个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,它有“窗口”作为其类。所有连接都是通过此进行的。

但是,它再次加载窗口只是不会将其加载为模态。

任何想法?

有帮助吗?

解决方案 2

正如我上面所述的那样,我将一个对象拖到了ProgressModal窗口中,并通过该对象进行了连接。我应该完成的是文件的所有者我的窗口类。改变解决问题。

我从 http://www.youtube.com/watch?v=qbko6td-fwa

其他提示

在您的progressStatus方法的第一行中放置以下内容:

NSLog(@"%@", window);
.

如果您看到日志输出为null,这就是为什么的原因。

使用xib创建模态表的步骤:

  1. 将面板拖到您的mainmenu.xib
  2. @property (assign) IBOutlet NSPanel *sheetPanel;文件中添加AppDelegate.h
  3. @synthesize sheetPanel = _sheetPanel;文件中的
  4. 生成的AppDelegate.m
  5. 在步骤1中创建的mainmenu.xib中的面板的新引用插座链接到步骤2中创建的SheetPanel属性。
  6. 使用以下代码显示模态表:

    [NSApp beginSheet:_sheetPanel
       modalForWindow:_mainWindow
        modalDelegate:self
       didEndSelector:@selector(didEndSheet:returnCode:contextInfo:)
          contextInfo:nil];
    

编辑:我假设您想要一个模态窗口。如果您想要表单,请不要使用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];
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top