【问题标题】:OSX: Prevent an window from closing when user hits cmd+w keyOSX:当用户点击 cmd+w 键时防止窗口关闭
【发布时间】:2015-05-11 09:24:45
【问题描述】:

在我的 MAC 应用程序中,在一个用例中,我向用户提示了一个窗口并为他提供了 2 个选项(比如按钮保存和取消)。我想强制用户选择两个按钮中的任何一个来关闭窗口。

但目前我发现如果用户在窗口获得焦点时点击“Command + w”键,窗口就会关闭。在 .xib 资源文件中,我取消选中“关闭”选项,但这只会禁用窗口 UI 中的关闭选项。

如何确保我的窗口忽略“Command+w”键并保持原样而不关闭。

还尝试通过在 awakeFromNib 方法中添加以下代码来删除通知,但没有帮助。

[[NSNotificationCenter defaultCenter] removeObserver:NSWindowWillCloseNotification ];

也曾尝试实现“windowShouldClose”委托方法并返回NO,但从未调用此方法。文档也说这种方法不可靠。

【问题讨论】:

    标签: macos cmd window


    【解决方案1】:

    我最近不得不解决一个类似的问题。我不确定这是不是“正确”的方法。但它适用于我的目的,并且可能适用于你。

    我认为默认情况下,“关闭窗口”(CMD+W) 菜单项绑定到第一响应者的“执行关闭”操作。如果您删除此绑定并改为绑定到应用程序委托或主窗口控制器上的自定义 IBAction,则它允许您有条件地调用当前键窗口的 close 方法(如果它与您想要保持活动的实例不匹配)。

    @property (strong, nonatomic) MyWindowController *unstoppable;
    -(IBAction)killActiveWindow:(id)sender
    {   
        NSWindow *keyWindow = [[NSApplication sharedApplication]keyWindow];
        if ([keyWindow isNotEqualTo: unstoppable.window]){
            NSLog(@" CMD+W Closing Window %@",keyWindow.title);
            [keyWindow close];
        }
    }
    

    【讨论】:

      【解决方案2】:

      对于这种提示,您应该使用NSAlert,可能在窗口上作为工作表运行。这样可以避免关闭它的问题。

      在任何情况下,窗口的委托都可以实现-windowShouldClose: 来控制是否允许关闭窗口。您可以通过声明对象(通常是窗口控制器)采用NSWindowDelegate 协议并将窗口的delegate 出口连接到该对象来使对象(通常是窗口控制器)成为其委托。

      【讨论】:

        猜你喜欢
        • 2012-08-28
        • 2020-05-22
        • 1970-01-01
        • 1970-01-01
        • 2018-01-11
        • 2013-09-08
        • 2019-01-29
        • 2019-09-30
        • 2018-05-24
        相关资源
        最近更新 更多