如何关闭macOS开发中的新窗口?

时间:2018-08-18 05:38:07

标签: objective-c macos cocoa

我是macOS应用程序开发的新手。 我有一个主窗口和一个名为ImageSetter的自定义窗口,都具有windowcontroller。 在主窗口中,我有一个按钮,其作用是通过以下方式打开新窗口:

ImageSetter *anImageSetter = [[ImageSetter alloc] initWithWindowNibName:@"ImageSetter"];
    [anImageSetter showWindow:self];

在ImageSetter的窗口上,我想附加一个按钮,其功能是关闭ImageSetter窗口。我尝试使用

[aButton setTarget:self];
[aButton setAction:@selector(closeItself)];

- (void)closeItself{
  [self.window close];
}

在ImageSetter的实现中。 但是我发现无法使用该按钮将其关闭。 救命! 谢谢。

1 个答案:

答案 0 :(得分:1)

首先,标准窗口在标题栏中已经有一个按钮将其关闭。如果可能的话,应该使用标准控件。

如果窗口中有一个按钮,而您只想关闭其窗口,则只需在响应者链上发送performClose:消息即可:

// [aButton setTarget:nil/* first responder */]; -- already nil, nothing to set
[aButton setAction:@selector(performClose:)];

该按钮会将-performClose:消息发送到实现该消息的响应者链中的第一个对象,在您的情况下,该对象应该是包含该按钮的窗口。

如果要明确说明目标,可以直接设置它:

[aButton setTarget:aButton.window];