Objective c performClose:在无边界窗口上?

Objective c performClose:在无边界窗口上?,objective-c,cocoa,xcode,nswindow,Objective C,Cocoa,Xcode,Nswindow,有没有办法让该方法在使用NSBorderlessWindowMask时运行?我必须重写什么方法?(如果可能的话)由于无边框窗口没有关闭按钮,性能关闭:将不起作用。您应该改为使用close方法。但是,此方法也不会对窗口的委托调用windowShouldClose:,并且不能连接到iAction。如果需要这些特性,可以创建一个包装器方法来处理关闭 @interface NSWindow (BorderlessClosing) - (IBAction)performBorderlessClose:(i

有没有办法让该方法在使用NSBorderlessWindowMask时运行?我必须重写什么方法?(如果可能的话)

由于无边框窗口没有关闭按钮,
性能关闭:
将不起作用。您应该改为使用
close
方法。但是,此方法也不会对窗口的委托调用
windowShouldClose:
,并且不能连接到iAction。如果需要这些特性,可以创建一个包装器方法来处理关闭

@interface NSWindow (BorderlessClosing)
- (IBAction)performBorderlessClose:(id)sender;
@end

@implementation NSWindow (BorderlessClosing)
- (IBAction)performBorderlessClose:(id)sender {
    if([[self delegate] respondsToSelector:@selector(windowShouldClose:)]) {
        if(![[self delegate] windowShouldClose:self]) return;
    } else if([self respondsToSelector:@selector(windowShouldClose:)]) {
        if(![self windowShouldClose:self]) return;
    }
    [self close];
}
@end

我已经重写了一些方法,它是有效的。我现在想知道的是,我是否从坏方法中吸取了教训:)


正如凯尔所说,覆盖你的窗口并添加

-(BOOL)canBecomeKeyWindow
{
    return YES;
}
在WindowController中

 - (IBAction)performClose:(id)sender

应在使用Close MenuItem时调用。

感谢您的回复,但我想使用performClose:因为我希望菜单栏中的按钮与我的第一个响应者的方法相连接(performClose:,performZoom:,performMiniaturize:)。我想在我的菜单中的按钮,以及键盘快捷键(cmd+w…)在我的应用程序中的每个窗口工作。。。主窗口(无边框),还有设置窗口,这是一个经典的NSWindow…我无法用语言表达我对这篇文章的感谢,非常感谢。我已经找了一个小时来解决这个问题。请注意,在这种情况下,对于canBecomeKeyWindow,无边界窗口也应该返回YES。请告诉我您什么时候会来德国,以便我可以为此支付您一杯啤酒!
 - (IBAction)performClose:(id)sender