首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有图像和文本的NSMenuItem

具有图像和文本的NSMenuItem
EN

Stack Overflow用户
提问于 2012-07-20 16:25:55
回答 2查看 6.2K关注 0票数 3

我有一个关于NSMenuItems的问题。

我尝试做的是使用原生OS X组件复制java GUI,因此我使用的语言是Cocoa。我想做的是让每个菜单项都有一个图像,然后在它旁边加上一些文本。

我已经对它做了一些研究,我的第一个停靠点(看起来总是很有趣)是苹果文档,它有一个方便的例子,说明了如何将视图嵌入到menuitem中:

https://developer.apple.com/library/mac/#samplecode/MenuItemView/Listings/MyWindowController_m.html#//apple_ref/doc/uid/DTS10004136-MyWindowController_m-DontLinkElementID_8

作为cocoa的新手,我想我必须覆盖NSMenuItem中的一个绘制方法。不过也不是很确定。我正在尝试的另一个想法是创建一个包含图像和一些文本的自定义视图。

任何其他想法/验证或讨论都将不胜感激。

谢谢大家!

哦,GUI的创建是手工完成的,没有界面生成器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 22:16:54

好了,我现在有了菜单项,旁边有图标。对于任何对此感兴趣的人来说,它都是(我没有对它做过泄漏分析或其他任何事情)。

首先,把你想要的所有图片放到"Resources“文件夹中(这就是Xcode3.1.4中的叫法)。

现在,例如,在我们有了所有的图像后,我们想要使用名为"eraser.png“和"eraser_on.png”的图像,我想将它们附加到第三个菜单项中。为了实现这一点,我们执行以下操作:

下面的代码将获取菜单中位置3的菜单项

代码语言:javascript
复制
NSMenuItem *item = [ nameOfPopUpButton itemAtIndex:2];

下面的代码将菜单项的图像设置为"eraser.png“

代码语言:javascript
复制
[ item setImage: [ NSImage imageNamed:@"eraser"] ];

这就是您为菜单项设置的图像(它将位于文本的左侧,也就是文本之前)。

如果你想在不同的状态下使用不同的图像,比如当用户按下它时,使用这种方法(我自己没有测试过,但它听起来很合理:D,函数直接从api中出来)

代码语言:javascript
复制
[item setOnStateImage: [ NSImage imageNamed:@"eraser_on" ] ]

但是,您可以将其保留为空或根本不设置它,它将变为默认颜色

希望这对某些人有帮助。

https://developer.apple.com/library/mac/#samplecode/MenuMadness/Listings/Controller_m.html#//apple_ref/doc/uid/DTS40008870-Controller_m-DontLinkElementID_4拼凑而成

谢谢:)

票数 9
EN

Stack Overflow用户

发布于 2012-07-20 17:39:08

如果您需要这样做,那么在创建包含图像和标签子视图的视图时,您就有了正确的想法。

但是:不要这样做。创建“原生”应用程序主要不是关于您选择的语言(这是Objective-C,btw,而不是Cocoa;后者是用Objective-C实现的开发框架的集合)。这与平台的一致性有关。

在OS (和iOS)上,UI设计的一致性可能比任何其他平台都重要。用户知道应用程序什么时候看起来很奇怪,并且在每个菜单项旁边都有图标(我肯定在Java应用程序中看到过),这在OS上肯定是奇怪和不自然的。用户最好会生气,最坏会感到困惑。

因此,我的建议是要么遵循人机界面指导原则(并节省大量工作作为一个很好的副作用),要么坚持使用现有的Java应用程序。

如果你想提供对常用功能的快速图标访问,在OS X上推荐的方法是使用工具栏。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11575593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档