是否有任何方法可以告诉 undoManager
在某些情况下,撤消步骤在编辑发生之前就已提交?
我有一个应用程序,可以自动将某些字符串替换为大写对应项。问题是,这必须在 textStorage
中自动完成,因此当撤消编辑时,文本仍保持大写。
我已经为相关操作编写了自定义撤消状态,这些状态是在 NSTextView shouldChangeTextInRange
中创建的:
例如:
[[self.undoManager prepareWithInvocationTarget:self]
replaceCharactersInRange:
NSMakeRange(affectedCharRange.location + affectedCharRange.length, string.length + 1) withString:string
];
我希望 undoManager
忽略编辑后将收到的撤消步骤。
最佳答案
一种方法是使用 [self.undoManagerdisableUndoRegistration];
禁用 NSUndoManager
记录撤消步骤。然后,操作完成后,您可以使用[self.undoManager enableUndoRegistration]
再次启用它。
这似乎是一个有点危险的方法,因为它真的会弄乱你的撤消堆栈。
我通过在 NSTextView
撤消注册之前执行额外的撤消步骤解决了此问题:
[self.undoManager registerUndoWithTarget:self handler:^(id _Nonnull target) {
[self replaceCharactersInRange:undoStringRange withString:undoString];
}];
不过,重做可能会造成损害,因为整个受影响的字符串可能无法使用 TextView 的内部方法注册。
关于objective-c - NSUndoManager 和替换/跳过撤消步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61897149/