我打开一个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关闭
请帮忙。非常感谢
答案 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的
答案 1 :(得分:0)
表单的重点是它们只是一个窗口的模态。应用程序的其余部分必须继续运行。用户可以使用其他窗口或执行全局操作,例如打开新文件等。阻止整个应用程序执行等待工作表完全违背工作表作为UI机制的目的。
如果您需要app-modal对话框,请将对话框作为模式窗口(而非工作表)运行。您可以使用具有NSAlert
方法的runModal
,也可以使用-[NSApplication runModalForWindow:]
使用任意窗口。