模态子窗口 - 就像床单而不是床单

时间:2011-06-02 23:11:19

标签: objective-c cocoa modal-dialog nswindow

我试图在Cocoa中复制工作表的模态行为而不实际使用工作表。也就是说,将无边框子窗口附加到主窗口并使子窗口成为唯一的响应者。父窗口应保持键,支持调整大小,但无法通过键盘或鼠标进行导航/响应。

到目前为止,我已经在主窗口中添加了一个无边界NSPanel子类,它从-acceptsFirstResponder返回YES,并以父模块的形式运行子窗口。父窗口仍然是关键窗口(因为NSPanel子类从-canBecomeKeyWindow返回NO),但父窗口仍然具有焦点。我可以使用键盘选择一个按钮,由于模态子窗口,该按钮无效。我需要子窗口成为第一响应者并调用-makeFirstResponder并为窗口设置-initialFirstResponder视图无效。

1 个答案:

答案 0 :(得分:1)

自Mac OS X 10.2以来,

NSWindow已采用- (void)addChildWindow:(NSWindow *)childWindow ordered:(NSWindowOrderingMode)orderingMode方法。使用NSWindowAbove排序模式应该非常接近您正在寻找的。如果您创建子窗口以覆盖父窗口(使子窗口无边框),但保留父窗口的标题栏 - 这应该是您正在寻找的。如果这是您想要的行为,您可能仍需要在显示子窗口时禁用与父窗口上的控件的交互。