Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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 在运行时更改Cocoa应用程序图标、标题和菜单标签_Objective C_Macos_Cocoa - Fatal编程技术网

Objective c 在运行时更改Cocoa应用程序图标、标题和菜单标签

Objective c 在运行时更改Cocoa应用程序图标、标题和菜单标签,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我有一个应用程序,应该有两种不同的操作模式:让我们称它们为模式1和模式2 我只能在应用程序启动后检查许可证详细信息,评估应用程序应使用的模式。最简单的选择是提供2个二进制文件,并决定应用程序在编译时使用哪种模式。但这不是我想要做的,因为应用程序的代码差别很小。我宁愿做一些运行时魔术 根据要使用的模式,让应用程序更改其标题、应用程序图标和菜单标签的最佳方式是什么 我尝试了在菜单栏中显示应用程序的名称,虽然我可以修改标题,但它没有使用粗体字体,而是使用常规字体。 [NSMenu title]只是一个

我有一个应用程序,应该有两种不同的操作模式:让我们称它们为模式1和模式2

我只能在应用程序启动后检查许可证详细信息,评估应用程序应使用的模式。最简单的选择是提供2个二进制文件,并决定应用程序在编译时使用哪种模式。但这不是我想要做的,因为应用程序的代码差别很小。我宁愿做一些运行时魔术

根据要使用的模式,让应用程序更改其标题、应用程序图标和菜单标签的最佳方式是什么

我尝试了在菜单栏中显示应用程序的名称,虽然我可以修改标题,但它没有使用粗体字体,而是使用常规字体。 [NSMenu title]只是一个常规的非属性字符串,因此我认为AppKit在启动应用程序并从Info.plist CbundLename中提取名称时发挥了一些魔力

我还考虑更改应用程序的Info.plist文件,但这将有两个问题:

应用程序需要重新启动,情况还不错 该应用程序将需要重新签名非常糟糕
期待您的建议

我认为您可以轻松地做您想做的事情,方法是绕过main.m中调用的NSApplicationMain函数,然后在您的应用程序代理中替换它在applicationdifinishLaunching中所做的操作。或者可能就在主楼

我想你可以检查一下你的许可证,然后在这个基础上为不同的主菜单启动不同的NIB

研究如何以编程方式更改OSX应用程序的图标,我认为您必须获取NSDockTile类的NSApplication的dockTile属性,并将其设置为contentView。令人惊讶的是,很少有人提到NSDockTile,但事实上


无论如何,忘记plist,但你可以这样做。从根本上说,您希望将目光从NSApplicationedLegate协议转向NSApplication,看看您可以通过什么来实现您想要的,也就是通过编程确定Info.plist和NSApplicationMain中的许多内容。我已经为NSMainNib做了这些,但是您还需要做一些。这是可能的,我希望你能做到。祝你好运

我认为您可以轻松地做您想做的事情,方法是绕过main.m中调用的NSApplicationMain函数,然后在您的应用程序代理中替换它在applicationdifinishLaunching中所做的操作。或者可能就在主楼

我想你可以检查一下你的许可证,然后在这个基础上为不同的主菜单启动不同的NIB

研究如何以编程方式更改OSX应用程序的图标,我认为您必须获取NSDockTile类的NSApplication的dockTile属性,并将其设置为contentView。令人惊讶的是,很少有人提到NSDockTile,但事实上


无论如何,忘记plist,但你可以这样做。从根本上说,您希望将目光从NSApplicationedLegate协议转向NSApplication,看看您可以通过什么来实现您想要的,也就是通过编程确定Info.plist和NSApplicationMain中的许多内容。我已经为NSMainNib做了这些,但是您还需要做一些。这是可能的,我希望你能做到。祝你好运

关于标题,我假设您指的是当您将鼠标悬停在Dock图标上时显示的Dock图标的标题

在应用程序图标、停靠图标标题和应用程序菜单标题中,唯一可以正确更改的是应用程序图标。执行[NSApp设置应用程序映像:someNSImage]

Dock图标的标题来自应用程序包的显示名称。Dock选择了这个标题,除了重命名你的应用包,你基本上无法控制它


应用程序菜单的标题来自Info.plist文件中的bundle名称。它在框架中以非常低的级别读取,没有机会对其进行自定义。

通过标题,我假定您指的是当您将鼠标悬停在其上时显示的停靠图标的标题

在应用程序图标、停靠图标标题和应用程序菜单标题中,唯一可以正确更改的是应用程序图标。执行[NSApp设置应用程序映像:someNSImage]

Dock图标的标题来自应用程序包的显示名称。Dock选择了这个标题,除了重命名你的应用包,你基本上无法控制它


应用程序菜单的标题来自Info.plist文件中的bundle名称。框架中的读取级别非常低,没有机会对其进行自定义。

Hmm,我不知道加载两个不同的NIB如何解决命名问题。在任何情况下,名称都是从CbundLename中获取的,对吗?请更改左上角菜单项的文本,并使用粗体字体。。。Ken的答案可能是正确的,图标文本可能来自捆绑包。否则我想你可以完成这项工作,我会用两个菜单来完成。如果你把这个和另一个答案结合起来,一定要做出你自己的答案。我有点经验
别这样。太多你无法通过谷歌搜索的细节了。你自己试过了吗?它就是不起作用。您可以更改菜单标题,如:NSMenu*theMenu=[[NSApp Main menu]itemAtIndex:0]子菜单];theMenu.title=@Test;但这不会有粗体字体。NSMenu没有属性标题,因此没有机会更改字体。嗯,我不知道加载两个不同的笔尖如何解决命名问题。在任何情况下,名称都是从CbundLename中获取的,对吗?请更改左上角菜单项的文本,并使用粗体字体。。。Ken的答案可能是正确的,图标文本可能来自捆绑包。否则我想你可以完成这项工作,我会用两个菜单来完成。如果你把这个和另一个答案结合起来,一定要做出你自己的答案。我有点期待。太多你无法通过谷歌搜索的细节了。你自己试过了吗?它就是不起作用。您可以更改菜单标题,如:NSMenu*theMenu=[[NSApp Main menu]itemAtIndex:0]子菜单];theMenu.title=@Test;但这不会有粗体字体。NSMenu没有属性标题,因此没有机会更改字体。按标题,我指的是菜单栏中显示的应用程序标题。对不起,我不太清楚。按标题我指的是菜单栏中显示的应用程序标题。对不起,我不清楚。