为什么我的表单不附加到它运行的窗口?

时间:2009-03-22 15:59:59

标签: objective-c cocoa nswindow nswindowcontroller cocoa-sheet

我有一个包含两个窗口的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:方法启动。但是,如何指示我的窗口应该是一张工作表而不是一个模态对话框?

2 个答案:

答案 0 :(得分:95)

几天前发生在我身上:

  • 您忘记设置窗口控制器的窗口插座( Nib文件的文件所有者)。 如Nathan所示,您可能会看到-[NSWindowController window]方法返回nil。
  • 您还必须取消选中工作表中的启动时可见选项。

答案 1 :(得分:18)

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