可可中的模态窗口

时间:2011-01-01 13:20:32

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

我正在尝试创建一个自定义模式窗口,这是我到目前为止的代码:

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实例变量。

我无法理解为什么它不是模态的。任何帮助将非常感激。感谢

3 个答案:

答案 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为您处理它。