Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何关闭NSWindow并从dock菜单中删除应用程序图标_Objective C_Macos_Cocoa_Statusbar - Fatal编程技术网

Objective c 如何关闭NSWindow并从dock菜单中删除应用程序图标

Objective c 如何关闭NSWindow并从dock菜单中删除应用程序图标,objective-c,macos,cocoa,statusbar,Objective C,Macos,Cocoa,Statusbar,若你们在MacBook上使用DropBox,你们一定已经看到了,一旦我们完成注册过程。它关闭主窗口应用程序并将其自身从dock项中删除,但应用程序正在从状态菜单运行 视觉: 到目前为止我所做的: 我的应用程序在show NSWindow中运行良好 当我从我的前端应用程序窗口登录时,我能够创建一个带有弹出窗口的状态菜单图标 在此步骤中,我想删除NSWindow和Dock图标,但应用程序应该可以从状态菜单访问。 如何做到这一点 仅供参考:我并不期待任何代码,只是理解或快速提示。我会找出剩下

若你们在MacBook上使用DropBox,你们一定已经看到了,一旦我们完成注册过程。它关闭主窗口应用程序并将其自身从dock项中删除,但应用程序正在从状态菜单运行


视觉:


到目前为止我所做的:
  • 我的应用程序在show NSWindow中运行良好
  • 当我从我的前端应用程序窗口登录时,我能够创建一个带有弹出窗口的状态菜单图标
  • 在此步骤中,我想删除NSWindow和Dock图标,但应用程序应该可以从状态菜单访问。
如何做到这一点

仅供参考:我并不期待任何代码,只是理解或快速提示。我会找出剩下的:)


我指的是资源, 稍后我将为配置我的应用程序。因此,在系统启动时,它可以启动并在状态菜单中显示自己。现在我正在寻找一个很好的资源(当然它很好,因为它是Apple Doc),但作为一个天真的程序员,有人有好的示例链接吗?其中显示了如何在已启动的应用程序中添加应用程序

编辑:
我将按照此操作添加到启动中,稍后用户可以更改他们的首选项(如果他们愿意),他们可以选择打开我的应用程序或在启动时关闭

要仅以状态菜单的形式运行应用程序,请将以下键之一添加到info.plist文件中:

应用程序是代理(UIElement)

或:

应用程序仅在后台运行


至于在两者之间切换,我不确定最佳方式,但我建议将设置过程设置为自己的应用程序。(带有图标和窗口的应用程序)您可以将应用程序包含在菜单项app中,并在用户启动程序时自动启动…

正如Teak所述,您希望在info.plist中输入“Application is agent(UIElement)”键。这个键意味着你不会有一个停靠图标。。。这就是你想要的。但是,不需要使用“应用程序仅限于后台”键。此键可防止您在屏幕上放置任何不必要的窗口。所以我会把这把钥匙留在外面

一般来说,设置应用程序,以便在启动时不会自动显示窗口。在启动时做一些检查,看看是否需要配置。如果是,则使您的配置窗口可见。您甚至可以在状态菜单中有一个“配置…”菜单项,这样您的用户可以在需要时随时弹出配置窗口。这确实非常简单,但不要使用“应用程序仅限于后台”info.plist键

顺便说一句,把窗户放在前面有点难。诀窍是让你的应用程序像这样排在最前面

[NSApp activateIgnoringOtherApps:YES];
[someWindow makeKeyAndOrderFront:nil];

通常,dropbox示例中提到的情况通过两个单独的应用程序解决,一个用于菜单,另一个用于其他ui部分(具有提到的dock图标f.e.),两个进程通过f.e.ipc进行协作

在一个应用程序中执行同样的操作有点棘手,你可以在这里找到我的详细信息


你不应该使用launchd,你应该将你的应用程序添加为登录项……但该教程有效,但已经过时。我相信有更好的方法做这件事,但我不记得怎么做了好的,我找到了最新的方法。。。它在10.6.6或更高版本有效:@Teak,这真的很有帮助,我在这里无法多次投票,所以我检查了你的其他答案并投了赞成票。再次感谢!没问题,我很高兴我记得…是的,GUI应用程序应该与状态项不同。您可以将流程从后台或UI元素转换为完整的GUI应用程序,但不能从另一个方向转换。要在前台/后台之间切换,您可以在此处找到我的提示