2013-04-23 5 views
5

私はUITextViewを解析しており、特定の文字が入力されたときにその属性が変更されています。テキストは変更されず、テキストの書式設定を記述する属性のみが変更されます。attributedTextプロパティをリセットせずにUITextViewの属性を変更する

すべての文字入力を解析すると、textを取得し、正しい書式の属性付き文字列を作成し、テキストビューのattributedTextプロパティを新しい属性付き文字列に設定します。これにより、オートコレクト、ダブルスペースショートカット、およびスペルチェックが完全に解除されます。

特定の特殊文字が入力されたときにのみ解析すると、少しうまく機能しますが、すべての文の2番目の単語のような奇妙なバグが大文字になります。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    if (text.length == 0) { 
     return YES; 
    } 
    unichar firstCharacterInText = [text characterAtIndex:0]; 
    if (/* special character */) { 
     [self processTextView]; 
    } 
} 

- (void) processTextView { 
    NSString *text = self.text; 

    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text]; 

    [attributedString addAttribute:NSFontAttributeName value:[UIFont fontWithName:kFontRegular size:12.0f] range:NSMakeRange(0, text.length)]; 
    [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor textColor] range:NSMakeRange(0, text.length)]; 
    // set other properties 
} 

私の質問は:TextViewにのattributedTextプロパティをリセットし、UITextViewのすべてのそれらの便利な機能を壊すことなく、私のテキストビューのテキスト属性を変更する方法はありますか?

+0

ちょっと後悔しています:textViewDidChange/shouldChangeでattributedTextを設定していて、実際にはバグではないことに気付いたときにレーダーをファイルしようとしていたときに、私は同じ問題が発生しました。新しい文字が入力されるたびにテキストビューがその内容を完全に変更するので、自動修正、二重スペースのショートカットなどは機能しません。私はCoreTextを探索する以外に、これに対する解決策を見ません。 – ntesler

+0

iOS 7では、あなたが望むものを達成するために 'TextKit'を使うことができます。 – fatuhoku

答えて

0

私は同じ問題を抱えていたし、それがUITextViewのattributedTextプロパティを設定するtextViewDidChangeトリガされたことが判明:方法を。だから、attributedTextのプロパティをの中から設定すると、textViewDidChange:メソッドが無限ループを作成しました。

私は即座にtextViewDidChange:メソッドから戻り、そのメソッドを呼び出すことになりました。それは正常に動作するようだが、私はまだいくつかの詳細を確認する必要があります。

関連する問題