如何在Cocoa Mac中以编程方式关闭窗口?

10

我怎样才能在Cocoa Mac中编程关闭一个窗口?我通过按钮点击从第一个窗口/xib打开了第二个窗口/xib。我需要在打开或点击按钮时程序化地关闭第一个窗口/xib,我应该怎么做?

可以使用以下代码行来关闭第一个窗口:

``` let window = NSApplication.shared.windows.first window?.close() ```

对于 orderOut,它显示我们的 firstView 可能无法响应 orderOut! - ShinuShajahan
之前尝试过 [window close]; 但是没有成功! - ShinuShajahan
firstView 是我的第一个子类。 - ShinuShajahan
出乎意料的是,这似乎不是一个重复的问题,所以为了完整起见,我提供了一个答案。这只是代码;正如@dreamlax的评论所暗示的那样,在这里没有太多讨论的余地。 - jscs
firstView听起来像是一个NSView的名称,而不是NSWindow。如果它确实是一个NSWindow,那么它将会响应[window orderOut:nil](这里的:nil非常重要)。 - dreamlax
显示剩余5条评论
4个回答

15

Nib加载的页面上,苹果提供了一些有用的示例代码。不过,它并没有直接回答这个问题;下面的代码则可以。

@interface CloseWindowAppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *window;
    IBOutlet NSWindow * secondWindow;
    NSNib * secondNib;
}

@property (assign) IBOutlet NSWindow *window;

- (IBAction)openSecondWindow:(id)sender;

- (IBAction)closeSecondWindow:(id)sender;

@end

#import "CloseWindowAppDelegate.h"

@implementation CloseWindowAppDelegate

@synthesize window;

- (IBAction)openSecondWindow:(id)sender {
    secondNib = [[NSNib alloc] initWithNibNamed:@"SecondWindow" bundle:nil];
    [secondNib instantiateNibWithOwner:self topLevelObjects:nil];
    [secondWindow makeKeyAndOrderFront:nil];

}

- (IBAction)closeSecondWindow:(id)sender {
    [secondWindow close];
    [secondNib release];

}

@end

代码讲解得非常清晰易懂,我觉得非常有用。我是 Stack Overflow 的新手,但已经深受感染。在这里,像您这样的人讲解得非常好。谢谢 :) - ShinuShajahan
1
@Josh-> 它很好用。谢谢你。你的代码对我正在面临的问题非常有帮助。 :) - ShinuShajahan

5
我很久以前就在寻找这个!一个简单的

[self close];
[self release];

对我有用,:-)

1
这是给正在使用 SwiftNSStoryBoardSegue 的人的,以下是实现相同效果的方法。
NSApplication.sharedApplication().mainWindow?.close() // close current window first
self.performSegueWithIdentifier("id_of_your_segue", sender: self) // open the second view by invoking the segue that is set to connect  two views.

0
您可以使用 "performClose" 动作。选择 Nib 文件(您想关闭的窗口),打开连接检查器,将 "performClose" 动作与您的按钮连接起来。

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