在无标题窗口中禁用所有控件

Posted

技术标签:

【中文标题】在无标题窗口中禁用所有控件【英文标题】:All controls disabled in title-less window 【发布时间】:2014-05-18 15:33:07 【问题描述】:

在我的应用程序中,我有一个辅助NSWindow,它是在我的NSWindowController 中的initWithWindowNibName: 方法中从.xib 创建的。该窗口是一个普通的NSWindow,标题栏已关闭。

创建窗口后,它使用makeKeyAndOrderFront: 显示 - 并且所有控件都被禁用(文本字段、组合框)。

我已经(超过..)三重检查窗口中的所有标志和控件的视图层次结构:一切都已启用,允许编辑而不是拒绝成为第一响应者。

完全不知道。有什么想法吗?

更新 #1: 我似乎问题与没有标题栏的窗口有关。当窗口上的标题栏打开时 - 并且窗口中的控件 - 按预期运行。

【问题讨论】:

“所有标志”是指可以在 IB 中设置的标志吗?特别是,如果您的窗口没有标题,那么-canBecomeMainWindow-canBecomeKeyWindow 将返回FALSE。您可能需要覆盖它们以返回 TRUE @KenThomases 确实 - 只是 IB 标志。好的,我会尝试使用子类。不过很麻烦.. 您的意思是窗口中唯一的控件是文本字段和组合框?此类控件需要位于关键窗口中并成为第一响应者才能发挥作用,而其他控件(如按钮)无需位于关键窗口中即可工作。 【参考方案1】:

正如 Ken 所指出的,如果关闭窗口标题,框架将 automatically refuse becoming a key window:

如果这样做,则放弃将窗口设置为关键窗口的尝试 方法返回 NO。 NSWindow 实现返回 YES 如果 窗口有标题栏或调整大小栏,否则没有。

一个简单的子类就可以了。

【讨论】:

您能否详细说明“子类”如何解决此问题? 覆盖 var canBecomeKey: Bool true @ZS 是的 - 如您阅读我的回答所示,您必须覆盖 canBecomeKeyWindow

以上是关于在无标题窗口中禁用所有控件的主要内容,如果未能解决你的问题,请参考以下文章

在WPF中,当在无边框窗口中拖动自定义的标题栏时,窗口会恢复,如何实现呢?

在 WPF 窗口中禁用除一个子控件之外的所有子控件

如何在无模式对话框中使用 Enter 键?

使用QT 4.7 - 对话框正忙着加载一件大事;如何禁用所有控件?

为啥在无监督学习中不使用 DropOut?

如何禁用表单上除按钮之外的所有控件?