26

我有一个包含两个窗口的 NIB,一个是应用程序的主窗口在启动时可见,另一个是自定义工作表(因此在启动时不可见)。当需要工作表时,我的控制器调用:

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

它显示工作表窗口并启动一个模态会话,该窗口有一个标准的 Aqua 标题栏,没有“连接”到主窗口,并且可以像常规窗口一样移动。不用说,这是不可取的:-)。为什么工作表窗口不会“弹出”它运行的窗口,就像工作表通常以这种方式开始时所做的那样?

我想知道我在控制器内部开始工作表这一事实是否-awakeFromNib会产生影响,所以我将工作表移动到稍后可以触发的按钮动作上。这并没有改变行为。我还没有想过要尝试什么。我的目标是 10.5 SDK,使用 Xcode 3.1。

编辑:所以看起来我已经创建了一个模式对话框;工作表和应用程序模式对话框都使用该-beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:方法启动。但是我如何指示我的窗口应该是一个工作表而不是模式对话框?

4

2 回答 2

101

几天前发生在我身上:

  • 您忘记设置窗口控制器的窗口出口(文件的 Nib 文件的所有者)。正如 Nathan 所指出的,您可能会看到该-[NSWindowController window]方法返回 nil。
  • 您还必须取消选中工作表的启动时可见选项。
于 2009-03-23T08:22:08.980 回答
18

如果 mainWindow 为 nil,则工作表将显示为窗口/对话框。

于 2009-03-22T17:04:22.387 回答