我有一個視圖,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