2013-09-30 53 views
2

嘿傢伙我需要一些幫助。 我有一個UITextView的子類,它曾經在iOS6下工作。但在iOS7中它有一些奇怪的行爲。我重寫shouldChangeTextInRange方法,以便可以處理一些鍵盤輸入。 以下代碼顯示了這種奇怪的行爲。當你按下'a'(或者你可以用任何你想要的其他字符替換'a')時,光標會向後跳到UITextView中的某個地方,然後回到它應該的位置。 在iOS6中,它永遠不會顯示像這樣的東西。在iOS7中,它不會影響用戶的輸入,但它看起來很奇怪。UITextView的子類在iOS7中有奇怪的行爲

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

    NSMutableString *updatedText = [[NSMutableString alloc] initWithString:textView.text]; 
    [updatedText insertString:text atIndex:range.location]; 
    const char *pch = [text UTF8String]; 

    switch (*pch) { 
     case 'a': // you can replace it with any other char. 
      textView.text = updatedText; 
      return NO; 
      break; 

     default: 
      return YES; 
      break; 
    } 
} 

我把這個演示放在一個簡單的項目中,如果你想看。 https://dl.dropboxusercontent.com/u/75922069/test-uitextview.zip

回答

0

我做了一個解決方法,創建一個NSLayoutManager來解決這個錯誤。或者,如果你只需要得到正確的textVIew.contentSize,你可以從這裏獲得詳細信息: Click here

0

嘗試改變直接的UITextView的NSTextStorage對象的文本。你可以做這樣的事情:

[myTextView.textStorage replaceCharactersInRange:(NSRange) withString:(NSString *)] 

[myTextView.textStorage insertAttributedString:(NSAttributedString *) atIndex:(NSUInteger)] 

請注意,這隻會在IOS 7工作...