我有一个包含两个窗口的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:
方法启动的.但是,如何指示我的窗口应该是工作表而不是模态对话框?
这发生在几天前我:
你忘了设置窗口的窗口控制器(出口文件的所有者笔尖文件).如Nathan所示,您可能会看到该-[NSWindowController window]
方法返回nil.
您还必须取消选中工作表中的Visible at launch选项.
如果mainWindow为nil,则表单将显示为窗口/对话框.