如何显示从xib加载的工作表? (MACOSX)

时间:2010-11-05 15:12:22

标签: cocoa macos nswindow nswindowcontroller

我有一个只有NSPanel的xib文件,我试图将此面板显示为模态表(带beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:)。该xib的文件所有者是一个控制器类“MyController”,它具有NSPanel的IBOutlet。

我正在寻找的是:

...
MyController *controller = [[MyController alloc] init];

[NSApp beginSheet:controller.panel modalForWindow:[NSApp mainWindow] modalDelegate:controller didEndSelector:nil contextInfo:nil];
...

问题: MyController必须继承自NSWindowControllerNSObject吗?我尝试NSWindowControllerinitWithWindowNibName:,但NSPanel的出口始终为零。

由于

1 个答案:

答案 0 :(得分:8)

我解决了。您必须停用几乎所有用于工作表的窗口对象(在IB中)的属性。我将以下方法添加到我的控制器以显示工作表:

- (void)showInWindow:(NSWindow *)mainWindow {
    if (!panelSheet)
        [NSBundle loadNibNamed:@"XibName" owner:self];

    [NSApp beginSheet:panelSheet modalForWindow:mainWindow modalDelegate:nil didEndSelector:nil contextInfo:nil];
    [NSApp runModalForWindow:panelSheet];   //This call blocks the execution until [NSApp stopModal] is called
    [NSApp endSheet:panelSheet];
    [panelSheet orderOut:self];
}

panelSheet是表单窗口的IBOutlet。

感谢Jon Hess和JWWalker的帮助