Cocoa 如何使用红色窗口按钮检测我的窗口正在关闭?

Cocoa 如何使用红色窗口按钮检测我的窗口正在关闭?,cocoa,nswindow,nswindowcontroller,Cocoa,Nswindow,Nswindowcontroller,我有一个对话框窗口,可以通过自定义取消按钮或使用系统红色窗口按钮取消。当对话框取消时,我需要执行一些简单的逻辑。如何检测用户已按下红色按钮 我知道我可以使用-windowWillClose:委托回调检测正在关闭的窗口。但是,当我在对话框成功后以编程方式关闭窗口时,也会调用此回调。我也知道我可以简单地设置一个BOOL标志,但是有更好的解决方案吗?最好能检测到红色按钮的激活。定义关闭按钮: NSButton *closeButton = [self standardWindowButton:NSWi

我有一个对话框窗口,可以通过自定义取消按钮或使用系统红色窗口按钮取消。当对话框取消时,我需要执行一些简单的逻辑。如何检测用户已按下红色按钮

我知道我可以使用
-windowWillClose:
委托回调检测正在关闭的窗口。但是,当我在对话框成功后以编程方式关闭窗口时,也会调用此回调。我也知道我可以简单地设置一个
BOOL
标志,但是有更好的解决方案吗?最好能检测到红色按钮的激活。

定义关闭按钮:

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]; 
}

同时使用“取消”按钮和“关闭”按钮是不正确的UI(至少在Mac上不是这样)。在对话框中,按钮是存在的,因此它们是足够的。在这种情况下,窗口框架中不应有启用的红色按钮;在Cocoa中,这是通过设置窗口的遮罩来实现的。谢谢,这正是我想要的。我使用了相同的技巧,效果非常好,但请注意,不会调用windowShouldClose: