标题中的问题正是我发生的事情。一,我选择了所需的文件,打开的面板对话框变得无法选择,但保持在所有其他窗口之上。我将进一步解释:
使用我的应用程序中的菜单项,我以这种方式启动配置窗口:
-(void)launchConfigurationWindow
{
[self loadInfo];
[self makeKeyAndOrderFront:nil];
[NSApp runModalForWindow:self];
if (abortConfigurationOperation) return;
[self saveInfo];
}
可以使用“完成”或“取消”按钮关闭该窗口:
-(IBAction)finishButtonPressed:(id)sender
{
abortConfigurationOperation = false;
[self orderOut:self];
[NSApp stopModal];
}
-(IBAction)cancel:(id)sender
{
abortConfigurationOperation = true;
[self orderOut:self];
[NSApp stopModal];
}
在该窗口中,我有一个高级按钮,以显示高级窗口。这就是我所说的:
-(void)launchAdvancedWindow
{
[self loadAdvancedInfo];
[self makeKeyAndOrderFront:nil];
[NSApp runModalForWindow:self];
if (!abortAdvancedConfigurationOperation)
{
[self saveInfo];
}
}
-(IBAction)finishButtonPressed:(id)sender
{
abortAdvancedConfigurationOperation = false;
[self orderOut:self];
[NSApp stopModal];
}
-(IBAction)cancelButtonPressed:(id)sender
{
abortAdvancedConfigurationOperation = true;
[self orderOut:self];
[NSApp stopModal];
}
在高级窗口中,我有一个调用NSOpenPanel来选择文件的按钮,这就是问题所在:
-(IBAction)selectNewFile:(id)sender
{
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setTreatsFilePackagesAsDirectories:YES];
[openDlg setAllowsMultipleSelection:NO];
[openDlg setTitle:NSLocalizedString(@"Select file",nil)];
[openDlg setCanChooseDirectories:NO];
if ([openDlg runModal] == NSOKButton)
{
NSString* newFile = [(NSURL*)[[openDlg URLs] firstObject] path];
[self.filePathField setStringValue:newFile];
}
}
虽然self.filePathField
填充了newFile
,但面板不会消失;它只是保持在那里,在所有其他窗户之上,是不可选择的。关闭它的唯一方法是按“高级”窗口的“取消/完成”按钮和“配置”窗口的“取消/完成”按钮,或关闭应用程序。
我认为它与模态相关,但我不知道如何解决它,也不知道确切的原因。
编辑:我只需要一个针对该问题的解决方案,即使这意味着不使用配置和高级窗口的模态,但我需要具有同等效果的东西。
这意味着:当我的应用程序是焦点并且高级窗口打开时,它应该在其他窗口之上,并且我的应用程序的主窗口应该是不可选择的; “高级”窗口未打开时,“配置”窗口也是如此。此外,NSOpenPanel对话框(在“高级”窗口中调用)应该可以正常工作。
编辑2:还有一个细节:如果打开“高级”窗口,打开另一个程序,然后返回到我的应用程序,“配置”窗口将自己保持在前面,保持高级窗口在其后面
编辑3:另一个细节:如果我关闭“高级”窗口(“取消”或“完成”按钮),“高级”按钮会一直按下。