1

我正在为我想使用 NSFontPanel 的应用程序创建一个功能。我不想在我的应用程序中有“字体”菜单。

单击菜单项时打开和关闭字体面板是这样完成的

- (IBAction) showOverlayControls:(id)sender
{
    if ( [[NSFontPanel sharedFontPanel] isVisible])
    {
        NSLog(@"Test");
        [[NSFontPanel sharedFontPanel] orderOut:self];
    }
    else
    {
        NSFontManager* fontMgr = [NSFontManager sharedFontManager];
        [fontMgr setTarget:self];

        NSFontPanel* fontPanel = [NSFontPanel sharedFontPanel];
        [fontPanel orderFront:self];
    }
}

它工作正常。当我尝试在应用程序启动时关闭字体面板以防显示时出现问题。我试过了

if ( [[NSFontPanel sharedFontPanel] isVisible] )
    [[NSFontPanel sharedFontPanel] close];

或者

if ( [[NSFontPanel sharedFontPanel] isVisible] )
    [[NSFontPanel sharedFontPanel] orderOut:self];

我也尝试过没有 if 语句,仍然没有运气。如果在应用程序关闭时显示面板,则在应用程序打开时它总是会再次弹出。我还尝试在我的应用委托的 appWillTerminate 方法中关闭字体面板。相同的行为。

将不胜感激任何提示。提前致谢,

弗洛

4

2 回答 2

3

你在哪里调用这些方法?它必须工作。

您可以像这样在 AppDelegate-applicationDidFinishLaunching:通知中调用它:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    if ([[NSFontPanel sharedFontPanel] isVisible])
        [[NSFontPanel sharedFontPanel] orderOut:self];
}
于 2012-08-31T20:18:29.933 回答
0

如果应用程序在 NSFontPanel 或 NSColorPanel 仍然可见时关闭,此解决方案可能会有所帮助。将以下代码添加到您的 AppDelegate 类,以避免在启动应用程序时恢复 NSFontPanel 或 NSColorPanel 窗口。感谢https://christiantietze.de/posts/2019/06/observe-nswindow-changes/提供了一种检测何时添加窗口的方法。

func applicationDidUpdate(_ notification: Notification) {
    NSApp.windows
        .filter { ["NSFontPanel", "NSColorPanel"].contains($0.className) }
        .filter { $0.isVisible }
        .forEach { $0.isRestorable = false }
}
于 2021-09-26T01:11:16.223 回答