NSUndoManager操作名称中的&符号有什么特别之处?

时间:2015-06-11 16:56:25

标签: macos cocoa undo

我注意到,如果我说出像

这样的话
[self.undoManager setActionName: @"X & Y"];

然后生成的菜单项看起来像"撤消X Y" (在X和Y之间有一个双重空格)。 (在Mac OS X 10.7.5和10.10.3上测试过。)我可以通过将它加倍来显示&符号,但我想知道它为什么会发生?有记录吗?是否有一些更广泛的字符集在动作名称或菜单项中特别解释?

1 个答案:

答案 0 :(得分:3)

回到NeXT时代,菜单项可能有一个"助记符",这是一个在菜单中显示为下划线的字符。如果用户在菜单具有焦点时键入该字符,则将选择该项目。

在代码中,通过在字符前面加上&符号,在菜单标题字符串中指示助记符。 <{1}}上仍有不推荐使用的方法来设置和获取助记符。

OS X不支持该功能。它不会显示带下划线的字符,也不会让您通过键入来选择菜单项。所以,这些方法只是从标题中删除了&符号。

显然,NSMenuItem必须仍然使用其中一个基于助记符的API来设置菜单项标题。这大概是为了向后兼容。某些应用程序可能在撤消操作名称中使用“&”符号,意图将它们转换为助记符。如果NSUndoManager停止剥离它们(通过切换到NSUndoManager的更常见的非助记符方法),那么这些应用可能会在奇怪的地方开始显示&符号。