如何更改 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 按键事件