模态窗口没有关闭

时间:2012-05-23 08:03:37

标签: objective-c cocoa nswindow nswindowcontroller nsapplication

我正在运行自定义的NSWindowController作为模态窗口。

首先我这样表现出来:

ProgressWindow *pWin = [[ProgressWindow alloc] initWithWindowNibName:@"ProgressWindow" andXmlContent:nil];        
[NSApp runModalForWindow:[pWin window]];

然后我想从ProgressWindow的NSWindowController中解雇它。为此,我在windowDidLoad函数下面设置代码(只是为了测试):

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]];
[self testMethod];

正如预期的那样,它在2秒后调用testMethod该方法应该关闭模态窗口,但我似乎找不到这样做的方法。我尝试了[NSApp stopModal][NSApp abortModal][self close],将其设为工作表并调用[self.window orderOut:nil];[NSApp endSheet:self.window];,但似乎没有任何效果。没有任何反应或窗口在另一个位置重新打开。我不知道为什么会这样,初始化代码只调用一次。

任何人都知道如何关闭它?

1 个答案:

答案 0 :(得分:-1)

我相信你以不正确的方式使用RunLoop。 RunLoop是一个循环,用于管理应用程序中GUI小部件的显示和交互,如果您停止主RunLoop,您的应用程序将停止更新。

由于您正在使用runUntilDate,因此您正在停止处理GUI更新,因为主RunLoop已停止。

要获得所需的功能,可以使用addTimer来运行runloop,或者使用单独的NSTimer和参数选择器来启动stopModal消息。