3

我有一个关于 NSMenuItems 的问题。

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

我已经对它进行了一些研究,我的第一个停靠点(似乎总是大声笑)是苹果文档,它有这个方便的例子,它说明了如何在菜单项中嵌入视图:

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

作为可可的新手,我想我必须重写 NSMenuItem 中的一种绘图方法。不过不太确定。我正在玩弄的另一个想法是创建一个包含图像和一些文本的自定义视图。

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

谢谢大家!

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

4

2 回答 2

9

好的,所以我现在有了旁边带有图标的菜单项。对于任何对此感兴趣的人来说(我还没有对其进行泄漏分析或其他任何事情)。

首先,将您想要的所有图像放入“Resources”文件夹中(这就是它在 xcode 3.1.4 中的名称)。

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

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

NSMenuItem *item = [ nameOfPopUpButton itemAtIndex:2];

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

[ item setImage: [ NSImage imageNamed:@"eraser"] ];

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

如果您想要不同状态的不同图像,例如当用户按下它时,请使用此方法(我自己没有测试过,但它听起来很合理:D 并且功能直接来自 api)

[item setOnStateImage: [ NSImage imageNamed:@"eraser_on" ] ]

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

希望这可以帮助某人。

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

谢谢 :)

于 2012-07-20T14:16:54.443 回答
3

如果你需要这样做,你有正确的想法来创建一个带有图像和标签子视图的视图。

但是:不要这样做。创建“本机”应用程序主要不是关于您选择的语言(这是 Objective-C,顺便说一句,不是 Cocoa;后者是在 Objective-C 中实现的开发框架的集合)。这是关于符合平台的。

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

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

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

于 2012-07-20T09:39:07.847 回答