1

我的 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 保持为零的事情吗?有什么好方法可以让我找到自定义视图的父窗口吗?如果您对如何解决此问题有任何建议,或者可以提示我做错了什么,将不胜感激。

谢谢!干杯,特隆德

4

1 回答 1

2

您应该查看“表格简介”文档的“定位表格”部分。它解释了如何使用 window:willPositionSheet:usingRect 使工作表从其他地方出现在窗口标题栏下方:

于 2012-10-09T03:24:30.280 回答