在无标题窗口中禁用所有控件
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中,当在无边框窗口中拖动自定义的标题栏时,窗口会恢复,如何实现呢?