【问题标题】:Can't hide NSFontPanel on application launch无法在应用程序启动时隐藏 NSFontPanel
【发布时间】:2012-08-27 10:44:23
【问题描述】:

我正在为我想要使用 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 方法中关闭字体面板。 同样的行为。

希望有任何提示。 提前致谢,

弗洛

【问题讨论】:

    标签: objective-c cocoa nswindow nspanel


    【解决方案1】:

    你在哪里调用这些方法?它必须有效。

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

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
    {
        if ([[NSFontPanel sharedFontPanel] isVisible])
            [[NSFontPanel sharedFontPanel] orderOut:self];
    }
    

    【讨论】:

    • 不,这不起作用。我刚试过。同时,我集成了“字体”菜单,这让生活变得更加轻松。但是在启动时隐藏字体面板仍然不起作用。我不知道字体面板将其可见性状态存储在哪里,但它似乎覆盖了我在初始化后期的某个时间点所做的一切。
    • 嘿贾斯汀,我只能说它在这里不起作用。由于这是最明显的事情,我已经按照问题中的说明进行了尝试。可能是 10.8 或 Xcode 4.4 中的错误...
    • @Sid np,很高兴这对您有所帮助。
    【解决方案2】:

    如果应用程序在 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 }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多