我有一个视图,UITextView总是有焦点。我想要做的就是扩展内置的撤销/重做行为,以便在编程设置文本时支持撤消/重做(例如,当我清除它时,通过将其设置为@“”)。用UITextView撤消/重做(iOS/iPHone)
由于只有firstResponder获得撤销/重做事件,我以为我只是简单地使用UITextView的undoManager属性来创建我的调用。例如,
// Before clearing the text... [[self.myTextView.undoManager prepareWithInvocationTarget:self] undoClear:self.myTextView.text]; [self.myTextView.undoManager setActionName:@"Clear"]; // ... -(void)undoClear:(NSString *)textToRestore { self.myTextView.text = textToRestore; if ([self.myTextView.undoManager isUndoing]) { // Prepare the redo. [[self.myTextView.undoManager prepareWithInvocationTarget:self] undoClear:@""]; } }
不幸的是,这是行不通的。它:
- 提出一种新的空项目为
- 的“撤消清除”该项目后,被添加(如果我点击“撤销”,我看到了“撤消清除”)撤消堆栈(“撤消”)
- 撤销清除和重做清除工作,但是,然后我再次看到“撤消清除”,它从此不起作用。
任何想法?我接近这个错误吗?
更新:好像我已经想通了空撤销项目的问题:当我设置的UITextView 后,我叫prepareWithInvocationTarget的文本它发生。如果我以前打过电话,它不会发生。有趣的是,如果我不调用prepareWithInvocationTarget(即,通常,当我设置UITextView的文本),则空项不会被推入撤消堆栈。
您好,我想我的问题是与此类似,u能告诉我,什么方法调用undoClear方法?谢谢 – 2011-01-26 03:48:01
@Risma:就在你设置textView的内容之前。 – 2011-03-16 10:04:54
我尝试实现这种方法时遇到的一个问题是,所有先前的undos都会被擦除。所以,如果他们打字输入,然后点击“清除”,并想要撤消两次,它只会让他们回到他们以前的文字内容。 – Philosophistry 2011-09-07 01:47:01