【发布时间】:2014-01-15 04:47:25
【问题描述】:
我一直在为我的可可应用程序(OS 10.9)实现撤消功能,并且我已经使用 NSUndoManager 成功实现了撤消功能的实例。但是,我无法在编辑菜单下更改“撤消”文本!我正在使用 Apple 文档中详述的 setActionName 方法。我的相关方法:
- (void)FinishEditingName {
[[self UndoManager] registerUndoWithTarget:[self TestObject] selector:@selector(setName:) object:[NSString stringWithFormat:@"Testing Undo!"]];
[[self UndoManager] setActionName:@"Edit Name"];
[[self TestObject] setName:[NSString stringWithFormat:@"New Name"]];
NSLog([NSString stringWithFormat:@"%@",[[self UndoManager] undoActionName]]);
}
再次,撤消工作完美,即 [[self TestObject] Name] 在调用此方法时设置为“新名称”,选择编辑 -> 撤消将其更改为“测试撤消!”。但是,编辑菜单的第一个条目应该更改为文本“撤消编辑名称”,但它没有,它只是保持为“撤消”。如您所见,我已经确认文本 应该 通过使用 NSLog() 将其吐出来进行更改,它工作得很好(即它给出了“编辑名称”)。这里缺少什么?我需要以某种方式将 NSUndoManager 链接到 NSMenu 吗?如果是这样,则文档中缺少此内容!
提前致谢!
【问题讨论】:
-
这段代码在什么对象中?这个方法是从哪里调用的?
-
在这种情况下,
self是 NSWindowController 的自定义子类。该方法通过在窗口中编辑一个 NSTextField 来调用。 -
WindowController的undoManager是如何设置的?
-
[self setUndoManager:[[NSUndoManager alloc] init]];别告诉我我错过了初始化程序...
标签: objective-c cocoa nsstring nsmenu nsundomanager