2012-02-15 13 views
3

我有一個UITextView,我將所有文本視圖更改事件記錄到數組中。UITextView委託方法textView:shouldChangeTextInRange:replacementText:在快速刪除時給出錯誤replacementText

當用戶快速刪除時(按住刪除鍵一次刪除所有單詞而不是一個字符),當調用textView:shouldChangeTextInRange:replacementText方法時,範圍變量的長度僅爲1,當實際上,範圍應該是單詞中刪除的字母的數量。有誰知道任何解決此Apple Bug的方法,以便我可以正確識別UITextView中的位置和範圍以及更改的文本?

回答

0

不,它不是一個錯誤。每次文本發生變化時,此功能都會接到電話。可能您正在使用調試模式並使用鍵盤提供退格鍵。它會在觸發斷點之前生成多個事件。所以,該功能會多次撥打電話。

+0

我按下屏幕上的設備鍵盤上退格。每當textview更改時,函數都會被調用,正確。但是,當用戶快速刪除,整個單詞被刪除,它就會被調用一次,但range.length只有1。你說對整個單詞的一個刪除快速刪除,該shouldChangeTextInRange方法應爲每個被同時刪除的單詞中刪除的每個字符多次調用? – cncool 2012-02-15 15:29:34

0

當你在你的問題所提到的「範圍」總是1,即使整個單詞被刪除。 你必須檢查'range.length'範圍的長度,它將爲你提供從你的UITextView中刪除的字符的確切數量。 我有相同的情況下,做了圍繞基於它的一些工作,這將只允許一次不整字刪除單個字符:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    if([text isEqualToString:@""]) { 
     // Check if length of range being deleted is less than 1 then only delete it 
     if (range.length > 1) { 
      return NO; 
     } else 
      return YES; 
    } else { 
     return YES; 
    } 
}