0

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

NSWindowController *modalSheet = [[NSWindowController alloc]
initWithWindowNibName:@"MyCustomWindow" owner:self];

[NSApp beginSheet:[modalSheet window]
 modalForWindow:[self windowForSheet]
  modalDelegate:nil
 didEndSelector:nil
    contextInfo:nil];

该窗口可以正常弹出,但它不是模态的,例如您仍然可以对请求来自的父窗口执行操作。这个方法是从一个 NSDocument 对象调用的。

我尝试阅读:使用自定义表格

但是我不确定是什么myCustomSheet,因为它没有在任何地方声明。我假设它是一个NSWindow实例变量。

我只是不明白为什么它不是模态的。任何帮助将非常感激。谢谢

4

3 回答 3

6

希望这可以帮助。运行你的窗口控制器总是模态的。创建您自己的 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];
}
于 2015-03-20T12:21:01.783 回答
3

Apple 的 Window Programming Guide 中有一部分专门介绍了Using Modal Windows,它几乎可以告诉您您应该需要的一切。

于 2011-01-01T13:25:35.983 回答
0

你有没有机会worksWhenModal准备好YES?这将导致您所描述的行为,因为这就是它的目的。

关于将面板(您使用的是 NSPanel,对吗?)包装在它自己的窗口控制器中,您不需要这样做。实际上,我只是在没有窗口控制器的情况下制作床单。您需要的窗口控制器中是否有任何自定义逻辑?AppKit 为您处理它。

于 2011-01-01T15:03:49.707 回答