【问题标题】: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 标志。好的,我会尝试使用子类。不过很麻烦..
  • 您的意思是窗口中唯一的控件是文本字段和组合框?此类控件需要位于关键窗口中并成为第一响应者才能发挥作用,而其他控件(如按钮)无需位于关键窗口中即可工作。

标签: cocoa nswindow nswindowcontroller nsresponder nscontrol


【解决方案1】:

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

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

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

【讨论】:

  • 您能否详细说明“子类”如何解决此问题?
  • 覆盖 var canBecomeKey: Bool { true }
  • @ZS 是的 - 如您阅读我的回答所示,您必须覆盖 canBecomeKeyWindow
猜你喜欢
  • 1970-01-01
  • 2010-09-21
  • 2011-07-25
  • 1970-01-01
  • 2014-11-22
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多