如何检测窗口是否正在使用红色窗口按钮关闭?

5
我有一个对话框窗口,可以通过自定义取消按钮或使用系统红色窗口按钮来取消。当对话框被取消时,我需要执行一些简单的逻辑。如何检测用户是否按下了红色按钮?
我知道可以使用`-windowWillClose:`委托回调来检测窗口关闭。但是,当对话成功后,我也会在程序中关闭窗口时调用此回调。我也知道可以简单地设置一个`BOOL`标志,但是否有更好的解决方案?最好能够检测红色按钮的激活情况。

在 UI 设计中,同时拥有取消按钮和关闭按钮是不正确的(至少在 Mac 上是这样)。在对话框中,按钮已经存在了,因此它们足够使用。在这种情况下,窗口框架中不应该有启用的红色按钮;在 Cocoa 中,可以通过设置窗口的掩码来实现这一点。 - Kevin Grant
1个回答

14

定义关闭按钮:

NSButton *closeButton = [self standardWindowButton:NSWindowCloseButton];

将关闭按钮连接到自定义选择器:

[closeButton setTarget:self.delegate];
[closeButton setAction:@selector(closeThisWindow)]; 

运行特定的代码并手动关闭窗口。

-(void)closeThisWindow {

    //
    // The NSWindowCloseButton has been clicked.
    // Code to be run before the window closes.
    //

    [self close]; 
}

谢谢,这正是我想要的。 - zoul
我使用相同的技巧,它完美地运作,但要注意 windowShouldClose: 不会被调用。 - vtruant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接