2009-02-10 69 views

回答

4

您可以通過指定一個委託給UITextView中,貫徹​​在委託下面的方法做到這一點:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; 

在身體只是寫一些代碼,通過輸入文本掃描,看看你發現要過濾的字符,如果看到它們返回NO,否則返回YES。

+0

這還不夠。當用戶粘貼一些文本時,禁止的字符可能會被粘貼在文本中。在這種情況下,您可能不想完全拒絕粘貼。您可能更喜歡刪除(或替換)禁止的字符。在所有情況下,我仍然努力做到這一點。 – 2013-03-12 17:40:49

0

不幸的是,這並不是那麼簡單,因爲textView:shouldChangeTextInRange: replacementText:不必用單字符串調用。它用於鍵盤輸入,但不是粘貼時,或使用語音識別輸入文本時。

那麼,如果用戶粘貼(或指定)包含禁止字符的字符串,您想要做什麼?您可能希望讓所有有效的文本都通過並且只刪除(或替換)不需要的字符。

錯誤的想法是修復textViewDidChange:委託例程中的文本。雖然這似乎工作,但它以某種方式防止在UITextView工作的語音輸入。

正確的想法是實施textView:shouldChangeTextInRange: replacementText:完全過濾。下面是一個過濾掉換行符的示例實現:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if([text isEqualToString:@"\n"]) { 
     [textView resignFirstResponder]; // dismiss keyboard 
     return NO; 
    } 

    text = [text stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; // replace by spaces 

    NSString *fullText = [textView.text stringByReplacingCharactersInRange:range withString:text]; 
    textView.text = fullText; 

    return NO; 
} 

請注意,當用戶敲擊回車鍵時,它將關閉鍵盤。但並不完美:當用戶粘貼單個換行符時,它也會關閉鍵盤。這可能是一個問題,但這種情況很少發生。