Objective-C:如何保持线程直到NSSheet关闭?

时间:2015-11-27 10:04:42

标签: objective-c

我打开一个NSWindow作为NSSheet,我想保留该线程,直到NSSheet关闭。

    _license =  [[LicenseArgWindow alloc] initWithWindowNibName:@"LicenseArgWindow"];

    [self.window beginSheet:self.license.window  completionHandler:^(NSModalResponse returnCode) {}];

    [NSApp beginSheet: _license
       modalForWindow: _window
        modalDelegate: self
       didEndSelector: nil
          contextInfo: nil];   


///here is the problem 
///the thread reaches here wheather the nswindow is closed or not
BOOL isAgreed = _license.isAgreed;

如何在NSSheet启动时停止线程,并且线程不应该通过,直到NSWindow关闭

请帮忙。非常感谢

2 个答案:

答案 0 :(得分:2)

didEndSelector参数设置为:

[NSApp beginSheet: _license
           modalForWindow: _window
            modalDelegate: self
           didEndSelector: @selector(didEndSheet:returnCode:contextInfo:)
              contextInfo: nil];

并且做了#34;接受的许可证"位:

- (void)didEndSheet:(NSWindow *)sheet
         returnCode:(NSInteger)returnCode
        contextInfo:(void *)contextInfo
{
    [sheet orderOut:self];
    BOOL isAgreed = _license.isAgreed;
}
来自Apple的

Here is a guide

答案 1 :(得分:0)

表单的重点是它们只是一个窗口的模态。应用程序的其余部分必须继续运行。用户可以使用其他窗口或执行全局操作,例如打开新文件等。阻止整个应用程序执行等待工作表完全违背工作表作为UI机制的目的。

如果您需要app-modal对话框,请将对话框作为模式窗口(而非工作表)运行。您可以使用具有NSAlert方法的runModal,也可以使用-[NSApplication runModalForWindow:]使用任意窗口。