重新打开一个窗口并确定它是如何关闭的

时间:2015-01-08 11:55:47

标签: objective-c cocoa user-interface

我的主窗口上有一个按钮,可以打开另一个窗口来收集一些用户输入。如果用户完成输入,则窗口应该关闭。如果用户单击红色按钮,我需要显示警报并关闭窗口。在任何一种情况下,我都需要能够重新打开输入窗口。

我可以第一次打开窗口,但不能以编程方式关闭它,也不能重新打开它。我已经阅读了所有可以找到的帖子,并且找不到我可以申请的帖子。我认为我的问题是一个问题,而代表。

窗口的代表是Calibrate。

Calibrate.h

#import <Cocoa/Cocoa.h>
#import <Foundation/Foundation.h>
.
.
@interface Calibrate : NSWindowController
.
.
@end

Calibrate.m

#import "Calibrate.h"
Calibrate *calibrate;

- (IBAction)showCalibratePanel:(id)sender
{
  [calibrate showWindow:self];
}

- (void)handleMaxAngleChange:(NSNotification *)notification
{
  /////   last step in info gathering
  NSString *s = [[notification userInfo]objectForKey:@"myMaxAngleKey"];
  gotResponse = NO;
  [calibrate close];    //////////// does not close.
} 


#import "Calibrate.h"
@interface Calibrate () 
@end

@implementation Calibrate
.
.
- (id)init
{
  self = [super initWithWindowNibName:@"Calibrate"];
  return self;
}

- (void)windowDidLoad 
{
  [super windowDidLoad];
}

-(BOOL)windowShouldClose:(NSNotification *)note
{  //// fires when red button clicked but alert not shown.
    NSAlert *alert = [[NSAlert alloc] init];
    [alert setMessageText:@"Incomplete calibration may cause ERC to not work correctly."];
    [alert beginSheetModalForWindow:[NSApplication sharedApplication].mainWindow
                                        modalDelegate:nil 
                                        didEndSelector:nil     
                                        contextInfo:nil];

  return YES;
}

1 个答案:

答案 0 :(得分:0)

使用

[calibre.window close];

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/#//apple_ref/occ/instm/NSWindow/close

要显示窗口使用:

[calibrate showWindow:self];
和你一样。