【发布时间】:2011-07-02 11:28:44
【问题描述】:
我正在学习 Cocoa,并且我可以轻松地撤消工作。但是 setActionName: 方法让我很困惑。这是一个简单的示例:一个玩具应用程序,其窗口包含一个文本标签和两个按钮。按下开按钮,标签上显示“开”。按下关闭按钮,标签变为“关闭”。以下是两个相关方法(我为应用编写的唯一代码):
-(IBAction) turnOnLabel:(id)sender
{
[[self undoManager] registerUndoWithTarget:self selector:@selector(turnOffLabel:) object:self];
[[self undoManager] setActionName:@"Turn On Label"];
[theLabel setStringValue:@"On"];
}
-(IBAction) turnOffLabel:(id)sender
{
[[self undoManager] registerUndoWithTarget:self selector:@selector(turnOnLabel:) object:self];
[[self undoManager] setActionName:@"Turn Off Label"];
[theLabel setStringValue:@"Off"];
}
这是我的期望:
- 我点击开启按钮
- 标签变为“开启”
- “编辑”菜单中有“撤消打开标签”项
- 我点击了那个菜单项
- 标签变为“关闭”
- “编辑”菜单中有“重做开启标签”项
事实上,除了最后一个之外,所有这些都按我的预期工作。编辑菜单中的项目显示为“重做关闭标签”,而不是“重做打开标签”。 (当我单击该菜单项时,标签确实会变为 On,正如我所料,但这使菜单项的名称更加神秘。)
我有什么误解,我怎样才能让这些菜单项以我想要的方式显示?
【问题讨论】:
标签: cocoa undo nsundomanager