我正在尝试创建一个自定义模式窗口,这是我到目前为止的代码:
NSWindowController *modalSheet = [[NSWindowController alloc]
initWithWindowNibName:@"MyCustomWindow" owner:self];
[NSApp beginSheet:[modalSheet window]
modalForWindow:[self windowForSheet]
modalDelegate:nil
didEndSelector:nil
contextInfo:nil];
窗口弹出正常,但它不是模态的,例如您仍然可以在请求来自的父窗口中执行操作。从NSDocument对象调用此方法。
我试过阅读:Using Custom Sheets
但是我不确定myCustomSheet
是什么,因为它没有在任何地方声明。我假设它是一个NSWindow
实例变量。
我无法理解为什么它不是模态的。任何帮助将非常感激。感谢
答案 0 :(得分:5)
希望这会有所帮助。 总是以模态运行窗口控制器。创建自己的NSWindowController子类并添加这两个方法。
- (void)windowDidLoad
{
[super windowDidLoad];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{//TODO
[[NSApplication sharedApplication] runModalForWindow:self.window];
});
}
- (void)windowWillClose:(NSNotification *)notification
{
[[NSApplication sharedApplication] stopModal];
}
答案 1 :(得分:3)
Apple的窗口编程指南中有一部分专门针对Using Modal Windows,它告诉您几乎所有需要的内容。
答案 2 :(得分:0)
您是否有机会将worksWhenModal
设置为YES
?这将导致完全您描述的行为,因为这是它的目的。
关于在自己的窗口控制器中包装面板(你正在使用NSPanel,对吗?),你不需要。我实际上只是制作没有窗口控制器的床单。你需要在窗口控制器中有任何自定义逻辑吗? AppKit为您处理它。