objective-c – NSBorderlessWindow没有响应CMD-W / CMD-M

前端之家收集整理的这篇文章主要介绍了objective-c – NSBorderlessWindow没有响应CMD-W / CMD-M前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个NSWindow的NSBorderlessWindow子类,它具有透明且不透明的背景(所以它的外观是非矩形的).当我点击按钮时,我添加了自己的按钮作为关闭和最小化按钮,但由于某种原因,窗口不像正常情况那样响应CMD-W或CMD-M.我将我的NSWindow子类设置为返回YES到canBecomeKeyWindow和canBecomeMainWindow.

我的NIB仍然具有创建新项目时所有标准菜单项 – 包括“窗口”菜单中的“最小化”项目,其中定义了默认快捷键CMD-M.它连接到第一响应者发送performMiniaturize :.但是,当应用程序运行时它没有启用,因此它似乎必须询问窗口是否可以最小化并且窗口显示no或者其他内容. (我对OSX / Cocoa还很新.)

我错过了什么?

此外,也许这是相关的,我的无边框窗口启用了阴影 – 但与正常的标题窗口不同,当我通过单击它使我的窗口成为活动/前窗时,阴影不会改变.通常情况下,一个OSX聚焦窗口有一个稍大/暗的阴影,使它更突出,但我永远不会改变阴影.这就像我错过了让操作系统将此窗口视为真实/正常/主窗口或其他东西的东西,因此我失去了阴影变化和功能CMD-W / CMD-M.

解决方法

你所缺少的是当你创建一个无边框窗口时,你正在消除标准窗口附带的FrameView,它实际上实现了-keyDown:方法,它接收那些击键并使窗口小型化或关闭.

NSWindow本身实际上是一个相当轻量级的类,我们认为标准窗口行为的大多数都是由框架视图完成的.

猜你在找的cocoa相关文章