NSOpenPanel对话框不会关闭

时间:2017-05-27 01:30:11

标签: objective-c macos nsopenpanel

标题中的问题正是我发生的事情。一,我选择了所需的文件,打开的面板对话框变得无法选择,但保持在所有其他窗口之上。我将进一步解释:

使用我的应用程序中的菜单项,我以这种方式启动配置窗口:

-(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:另一个细节:如果我关闭“高级”窗口(“取消”或“完成”按钮),“高级”按钮会一直按下。

0 个答案:

没有答案