我如何将一个窗口放在一个单独的 NIB 中,给它自己的 NSWindowController,让它像一张纸一样滑出?
(这是与床单有关的典型事情吗?)
我正在尝试从我的主窗口显示一个自定义工作表(一个从父窗口的标题栏向下滑动的窗口)。我认为我正在尝试做的是标准的,但我找不到明确的例子或解释来说明如何完全按照我的意愿去做。
我正在尝试做的事情:
- 我的应用程序委托拥有主窗口,该窗口有一个打开“设置”表的按钮。
- “设置”表:
- 位于单独的 NIB 中。
- 将文件所有者设置为类 SettingsWindowController,它是 NSWindowsController 的子类
- 当用户单击“设置”时,我正在尝试使用 Apple 的 [示例代码][1]
- (void)showCustomSheet: (NSWindow *)window
// User has asked to see the custom display. Display it.
{
if (!settingsSheet)
//Check the settingsSheet instance variable to make sure the custom sheet does not already exist.
[NSBundle loadNibNamed:@"SettingsSheet" owner: self];
//BUT HOW DOES THIS MAKE settingsSheet NOT nil?
[NSApp beginSheet: settingsSheet
modalForWindow: window
modalDelegate: self
didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
contextInfo: nil];
// Sheet is up here.
// Return processing to the event loop
}
请原谅以下简单而众多的问题:
- 当我打电话时
loadNibName:owner:
,我不想owner
成为self
,因为这使我的应用程序委托“MyCustomSheet”的所有者 - 这就是我SettingsWindowsController
应该做的。但是,我不知道如何SettingsWindowsController
用这种方法制作所有者。 - 如果我的工作表选中了“启动时可见”,则
loadNibName:owner:
立即将该窗口显示为普通窗口,而不是从主窗口滑出的工作表。 - 如果我的工作表未选中“启动时可见”,则会
beginSheet:modalForWindow:etc
导致“模态会话需要模态窗口”。我很确定这是因为我做了笔尖的所有者self
(正如我已经提到的)。 - 在示例代码中,我不知道名为 @"SettingsSheet" 的 Nib 是如何与实例变量“关联”的
settingsSheet
——但它们显然是相关的,因为代码首先检查:(if (!settingsSheet)
我用注释标记了这个//BUT HOW DOES THIS MAKE settingsSheet NOT nil?
)
感谢您耐心阅读这一切!