【问题标题】:Objective-C: Show A window popup from background Cocoa applicationObjective-C:从后台 Cocoa 应用程序中显示一个弹出窗口
【发布时间】:2015-12-15 22:07:42
【问题描述】:

我创建了一个在用户后台运行并不断检查通知的 COCOA 应用程序。

当有通知时,应用程序应该显示一个弹出窗口。

我如何在后台运行应用程序?

我已设置 应用程序仅在后台

使用上述方法,应用程序正在启动,但未显示且在 Dock 中不可见。

我如何显示弹出窗口

    _popup =  [[showPopup alloc] initWithWindowNibName:@"showPopup"];

    [self.window beginSheet:_popup.window  completionHandler:^(NSModalResponse returnCode) {}];

    //showing the window
    [_popup showWindow:self];

问题

弹出窗口未显示。请建议我应该怎么做...

非常感谢!!

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:
    • 您可能想要“应用程序是代理 (UIElement)”(LSUIElement),而不是“应用程序仅是后台”(LSBackgroundOnly)。
    • 确保您的窗口已连接到 nib 中的窗口控制器(可能是这样,但以防万一……)
    • 别忘了打电话

      [NSApp activateIgnoringOtherApps:YES];

      以确保您的应用程序进入前台。

    【讨论】:

    • 非常感谢您在我的问题上节省您的时间,我想通知您,当我添加“LSBackgroundOnly”时,它会自动更改为“仅应用程序”,正如您所说我有添加了 [NSApp activateIgnoringOtherApps:YES];调用窗口窗体后。但没有好处,窗口仍然没有显示
    • 想要 LSBackgroundOnly。相反,您需要 LSUIElement。 LSBackgroundOnly 适用于无头(即 UI-less)应用程序。
    • 先生,它不能正常工作。可能在我的理解中有些问题,这就是为什么我创建了一个假人1drv.ms/1TRlf0R 在这个假人中,我在应用程序完成启动 2 秒后调用了一个表单。问题是不应该显示主表单,但应该显示第二个表单,它会在 2 秒后被调用
    • 确保LSUIElement 设置为YES!此外,取消选中 Interface Builder 中窗口的“启动时可见”。 (顺便说一句,你的项目对我有用。)
    • 请编辑您的答案,以便对其他人也有帮助。非常感谢您帮助我解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多