我的 OSX NSApplicationDelegate 有一个 NSWindow(主窗口)。NSWindow 还包含几个 NSView,其中内容是使用 NSViewControllers 设置的。目前,当我想要一个 NSPanel(一张工作表)从我的一个 NSView 的顶部(而不是从我的应用程序的顶部)下拉时,我遇到了一个问题。我想使用代码:
[NSApp beginSheet:self.loginSheet.window
modalForWindow:self.view.window
modalDelegate:self
didEndSelector:nil
contextInfo:nil];
loginSheet 是 NSWindowController 的子类,它使用以下方式加载 xib 文件:
loginSheet = [[sheetWindowController alloc] initWithWindowNibName:@"loginSheet"];
但是,我从我的 NSViewController 运行此代码,而我的 self.view.window 始终为零。我的 NSView 似乎以其他方式正确初始化并且工作正常,但是由于我的 modalForwindow (self.view.window) 为 nil,因此工作表的下拉菜单不起作用。如果我使用代码:
[NSApp beginSheet:self.loginSheet.window
modalForWindow:[[NSApplication sharedApplication] mainWindow]
modalDelegate:self
didEndSelector:nil
contextInfo:nil];
它就像一个魅力。但从我所有寻找问题答案的搜索来看,这种工作方法似乎是一个很大的禁忌,因为它阻止了整个应用程序的任何响应。我希望我的工作表链接到我的 NSView 之一,但鉴于该应用程序只有一个 NSWindow,我不知道如何做到这一点?我没有做一些让我的 self.view.window 保持为零的事情吗?有什么好方法可以让我找到自定义视图的父窗口吗?如果您对如何解决此问题有任何建议,或者可以提示我做错了什么,将不胜感激。
谢谢!干杯,特隆德