Gab*_*oth 7 cocoa undo nsundomanager
我正在学习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"];
}
Run Code Online (Sandbox Code Playgroud)
这就是我的期望:
事实上,除了最后一个之外,所有这些都是我所期望的."编辑"菜单中的项目显示"重做关闭标签",而不是"重做打开标签".(当我点击该菜单项时,标签确实会转为开启,正如我所料,但这使菜单项的名称更加神秘.
我有什么误解,怎样才能让这些菜单项显示我想要的方式?
请记住:当您重做时,您的代码必须为“撤消”菜单项设置一个“actionName”。
当您撤消或重做时,“重做”菜单项中的“actionName”会自动设置。
setActionName:仅更改撤消菜单项。重做菜单项 actionName 是自动执行的。
当您最初 setActionName:时![[self undoManager] isUndoing],此操作名称将转到“撤消”菜单项。当您选择撤消([[self undoManager] isUndoing] == YES,您未设置任何操作名称)时,undoManager会自动将此操作名称设置为“重做”菜单项,并将前一个撤消操作名称设置为“撤消”菜单项。当您选择“重做”时,您仍然需要传递一个 actionName 才能转到“撤消”菜单项。
换句话说:只有当您的代码不是 Undoing 时,您才必须设置 actionNames(但必须在最初调用或重做时设置)。
| 归档时间: |
|
| 查看次数: |
3212 次 |
| 最近记录: |