如何更改 NSPopUpButton 中 NSMenuItem 的短显示形式?

Posted

技术标签:

【中文标题】如何更改 NSPopUpButton 中 NSMenuItem 的短显示形式?【英文标题】:How do I change the short display form of an NSMenuItem in an NSPopUpButton? 【发布时间】:2011-10-21 06:27:01 【问题描述】:

我有一个 NSPopUpButton,其中包含一个长菜单,其中一些非常宽 - 比按钮的闭合宽度更宽。一些菜单项标题是这样的:

“一个很长的名字的开头并不那么有趣(重要信息)”

当菜单关闭时,显示如下:

“一个很长的名字的开头不是...”

我希望它显示为:

“真正开始……(重要信息)”

我不知道 NSPopUpButton 是如何创建省略号的。 NSMenuItem 上是否调用了选择器? NSPopUpButton 或 NSMenu 会以某种方式处理吗?

我需要子类化哪个类,需要覆盖或实现哪个选择器?

非常感谢。

【问题讨论】:

【参考方案1】:

这种机制称为截断。 Interface Builder 中有一个名为 Line Breaks 的选项,它被分组在 Control 组中。您可能正在寻找的设置称为Truncate Middle,它将开始从菜单项的中间挑选字母。

但是请注意,这并不能完全解决您的问题,因为 (important info) 部分可能不是“...”之后唯一剩下的部分,而是 Name of my Me…tem (important info)。此外,您还可能最终会部分截断重要信息。但我认为没关系,只要重要信息是一些数字或几个字母。

也许向菜单项添加图片可能更符合您的需求(某种徽章)?也许还有一个属性字符串选项可以强制字母不被截断……但不确定。

【讨论】:

这对我来说很好,只是我没有使用 Interface Builder:F*** 给了我需要的线索。从 NSPopUpButton 子类实例中:[[self cell] setLineBreakMode: NSLineBreakByTruncatingMiddle]【参考方案2】:

F*** 给了我我需要的线索。谢谢!

[[self cell] setLineBreakMode: NSLineBreakByTruncatingMiddle]

但是,如果有办法获得更细粒度的控制,那就更好了。有没有办法更精确地控制截断?

【讨论】:

以上是关于如何更改 NSPopUpButton 中 NSMenuItem 的短显示形式?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSPopUpButton 与测量单位选择连接到 NSTextField 的呈现方式?

如何以编程方式控制 NSPopUpButton 上的 TAB 按键事件

从出现在 NSPopUpButton 列表中的核心数据实体中过滤条目

oc之mac中NSPopUpButton

Cocoa NSPopupButton 问题

NSPopUpButton 在 Swift Playground 中灰显