我正在实现一个用于富文本编辑的格式栏。其中我有两个按钮撤消和恢复。我有关于苹果开发人员的文档,但无法使Redo工作。问题是我有一个UITextView。每当用户写入每个单词时,都会在[textView undoManager]中注册为撤消操作,如shouldChangeTextInRange中所示。
当用户单击Undo按钮时,它通过代码[[_myTextView undoManager]Undo]成功完成。但当用户单击"重做"按钮时,不会执行重做。
当用户点击redo时,我甚至打印了这个名字,比如[[_myTextView undoManager]redoActionName],它会打印"Change",Action的名字。但是在TextView的文本上什么也没发生。
我已经搜索了很多,但在每种情况下,人们都在使用接口生成器进行撤消和自动重做,但我使用的是代码。还要注意,即使在Ipad上,在我用键盘按钮撤消后,键盘上的内置按钮也无法进行重做。请引导我。
-(BOOL) textView: (UITextView *)textView shouldChangeTextInRange:(NSRange) range replacementText: (NSString *) text{
[[textView undoManager] registerUndoWithTarget:self selector:@selector(revertTextView:) object:textView.attributedText];
[[textView undoManager] setActionName:NSLocalizedString(@"Change",@" undo")];
}
-(void) revertTextView: (NSAttributedString *) textViewAttString{
_myTextView.attributedText = textViewAttributedString;
}
-(IBAction) undoClick{
[[_myTextView undoManager] undo];
}
-(IBAction) redoClick{
[[_myTextView undoManager] redo];
}
不要调用任何寄存器
TextView已经有NSUndoManager
,并且已配置
你需要做的是
- (IBAction)undoPressed
{
[[self.myTextView undoManager] undo];
}
- (IBAction)redoPressed
{
[[self.myTextView undoManager] redo];
}