提问人:silverdr 提问时间:10/31/2023 最后编辑:silverdr 更新时间:11/6/2023 访问量:37
NSUndoManager 和“撤消/重做”菜单项彼此“断开连接”
NSUndoManager and Undo/Redo Menu Items "disconnected" from each other
问:
在 Cocoa 应用程序中,我实现了撤消/重做,并且功能按预期工作。问题在于,这两个(“撤消”和“重做”)菜单项似乎都与正在使用的 NSUndoManager “断开连接”,从某种意义上说,它们没有根据撤消/重做堆栈大小禁用/启用。它们始终保持启用状态,并且也不会更新其“操作名称”
[undoManager setActionName:@"Move To Trash"];
似乎无效。菜单项始终显示“撤消”和“重做”。这两个项目都发送了它们的操作,并且操作有效。First Responder
由于应用程序不是基于的,我也尝试实现NSDocument
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)sender;
正如我在几个地方读到的那样,在窗口的委托中可能会有所帮助。该方法在操作和撤消时都会被调用,但这不会改变任何内容。一切行为都与没有此委托方法一样。
我还可能做错了什么或遗漏了什么?
答:
0赞
silverdr
11/6/2023
#1
万一其他人像我一样在这条路上浪费了那么多时间......
在这种特殊情况下观察到不当行为的原因是包含“撤消”和“重做”的“编辑”没有设置/选中“自动启用项目”。在Interface Builder中选中相应的复选框后,不仅两个菜单项都开始被正确禁用/启用,而且它们的文本内容也开始根据调用进行调整。NSMenu
NSMenuItem
NSUndoManager
setActionName:(NSString *)name
评论
undo:
NSTextView
undo:
NSTextField
NSTextView