【问题标题】:cocoa how to block the "Quit" menu item on dock menu可可如何阻止停靠菜单上的“退出”菜单项
【发布时间】:2011-12-07 23:48:37
【问题描述】:

我的停靠菜单总是自动添加“退出”和其他 2 个菜单项,我该如何阻止/修改它们?

更新:

真的没有办法删除/阻止/重定向“退出”菜单项。 终于像打击一样使用了彼得的推荐 希望对其他人有所帮助

-(NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
    if (needPassword)
    {
        [self checkPassword:self];
        return  NSTerminateCancel;
    }
    else 
    {
        return NSTerminateNow;
    }
}


-(void)checkPassword:(id)sender
{
    if(passwordCorrect)
    {   
        !needPassword;
            [[NSApplication sharedApplication] terminate:self];
    }
}

【问题讨论】:

  • 坏主意...你的用户想要吗?
  • 我不相信这是可能的。
  • 为什么要这样做?我们或许可以提出更好的解决方案。
  • 嗨,Rob,我的应用程序受密码保护,所有退出都会导致退出确认。

标签: cocoa menu menuitem exit


【解决方案1】:

试图拦截用户可能告诉您的应用程序退出的所有可能方式注定会失败。 (你还记得退出苹果活动吗?)

在应用程序的委托中实现the applicationShouldTerminate: method 会更容易也更有效。拉起密码面板并返回NSTerminateLater。然后,当用户输入正确密码或取消时,发送应用程序a replyToApplicationShouldTerminate: message

无论您已经删除了哪个退出命令(菜单项等),都将它们放回原处。让用户以正常方式调用正常的 Quit 命令;这将触发上述的应该终止程序来确定退出是否真的会发生。

【讨论】:

  • 是的,彼得,你是对的!但我真的发现一些应用程序杀死了那些菜单项。例如谷歌地球,或者这个带有“NOTATIONAL VELOCITY”来源的免费应用程序,你能找到它吗?抱歉,我没有上传图片的许可。
  • 如果你真的不希望用户能够退出,别忘了安装一个信号处理程序。
  • @JiulongZhao:Google 地球确实有一个退出菜单项。我从未使用过 Notational Velocity,但想不出任何不应该使用的理由。更一般地说,没有理由删除 Quit 菜单项。
  • 彼得,只需从“Dock-menu”中删除“Quit”即可。没有人喜欢强行添加一些东西......
  • NSTerminateLaterreplyToApplicationShouldTerminate 之前,右键从停靠栏退出不起作用
【解决方案2】:

1)打开 MainMenu.xib 2)创建自己的停靠菜单 3)右键单击文件的所有者(NSApplication实例) 4)将属性“dockMenu”与您的自定义菜单连接

如果您出于学习目的而想这样做,那很好。但是,当您想出售此应用程序时,您应该重新考虑这一点。用户希望您的应用在停靠菜单中有一个退出按钮。

【讨论】:

  • 嗨,Larus94,我只是按照你说的做了,但是系统总是会自动将“退出”、“显示所有窗口”和“隐藏”3 个菜单项添加到您的停靠菜单中!我的应用程序受密码保护,不能那样终止。
  • 你们有没有解决这个问题。即使我试图实现从停靠菜单中删除“显示所有窗口”的相同效果..
猜你喜欢
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多