【问题标题】:Why isn't my sheet attached to the window it's run for?为什么我的工作表没有附加到运行它的窗口?
【发布时间】:2009-03-22 15:59:58
【问题描述】:

我有一个包含两个窗口的 NIB,一个是启动时可见的应用程序主窗口,另一个是自定义工作表(因此在启动时不可见)。当需要工作表时,我的控制器会调用:

[NSApp beginSheet: sheetWindow modalForWindow: mainWindow modalDelegate: self didEndSelector: @selector(didEndSheet:returnCode:contextInfo:) contextInfo: nil];

显示工作表窗口并启动模式会话,该窗口有一个标准的 Aqua 标题栏,没有“连接”到主窗口,并且可以像常规窗口一样移动.不用说,这是不可取的:-)。为什么工作表窗口不从运行它的窗口“弹出”,就像工作表通常以这种方式开始时所做的那样?

我想知道我在控制器的-awakeFromNib 中开始工作表这一事实是否会产生影响,所以我将工作表移到了稍后可以触发的按钮操作上。这并没有改变行为。我还没有想过要尝试什么。我的目标是 10.5 SDK,使用 Xcode 3.1。

编辑: 所以看起来我已经创建了一个模态对话框;工作表和应用程序模式对话框都以-beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo: 方法启动。但是我如何指示我的窗口应该是一个工作表而不是一个模态对话框而不是

【问题讨论】:

  • 检查 mainWindow 是否不为零。
  • 我看不出有什么问题,也许一些上下文会有所帮助。
  • 你应该这样回答,内森。这几乎肯定是对的。
  • 我同意 Chuck :-)。内森,回答这个问题,我会赞成并接受 - 感谢您的帮助!
  • 另外,请参阅 Renaud Pradenc 下面关于 nib 文件中的“启动时可见”设置的回答。

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


【解决方案1】:

这几天前发生在我身上:

  • 您忘记设置窗口控制器的 window 出口(文件的所有者 Nib 文件)。 正如 Nathan 所指出的,您可能会看到 -[NSWindowController window] 方法返回 nil。
  • 您还必须取消选中工作表的启动时可见 选项。

【讨论】:

  • “在启动时可见”原来是我的问题 - 工作表出现在正确的时间,但与窗口断开连接,并且尽管我的 orderOut: 调用也不会消失。感谢您发布此消息!
  • “在启动时可见”确实也是我的问题。非常有用的答案。
  • 在发布时可见也是我的问题!
  • 在发布时可见...确实是我的问题。
  • 是的。在发布时可见,在 10.9.2 上仍然是解决方案
【解决方案2】:

如果 mainWindow 为 nil,则工作表将显示为窗口/对话框。

【讨论】:

    猜你喜欢
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2017-04-14
    • 2018-08-25
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多