Joh*_*tty 6 macos objective-c undo-redo nstextview
我想在替换NSTextView中的部分文本后实现撤消操作.我用以下代码替换部分文本
- (void)omeAction
{
NSString *fullString = [self.textView string];
NSRange selectedRange = [self.textView selectedRange];
NSString *selectedString = [fullString substringWithRange:selectedRange];
NSString *stringToReplace = ...;
[[self.textView textStorage] beginEditing];
[[self.textView textStorage] replaceCharactersInRange:selectedRange withString:stringToReplace];
[[self.textView textStorage] endEditing];
}
Run Code Online (Sandbox Code Playgroud)
执行撤消时,我无法撤消文本替换
来自Cocoa Text Architecture Guide:文本编辑 - 文本更改通知和委托消息:
在实际更改文本时,必须确保更改由文本系统的不同部分正确执行和记录.您可以使用shouldChangeTextInRange:replacementString:和didChangeText消息将每批潜在更改括起来.这些方法确保发送适当的委托消息并发布通知....
根据我的经验,这包括生成相关的撤消操作.
所以,你会这样做:
if ([self.textView shouldChangeTextInRange:selectedRange replacementString:stringToReplace])
{
[[self.textView textStorage] beginEditing];
[[self.textView textStorage] replaceCharactersInRange:selectedRange withString:stringToReplace];
[[self.textView textStorage] endEditing];
[self.textView didChangeText];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |