6

UITextView特定の文字が入力されると、解析され、その属性が変更される があります。テキストは変更されず、テキストのフォーマットを記述する属性のみが変更されます。

すべての文字エントリを解析すると、基本的に を取得textし、正しい書式設定で属性付き文字列を作成しattributedText、textview のプロパティを新しい属性付き文字列に設定します。これにより、オートコレクト、ダブルスペースのショートカット、およびスペル チェックが完全に機能しなくなります。

特定の特殊文字が入力された場合にのみ解析すると、これは少しうまく機能しますが、すべての文の 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 
}

私の質問は次のとおりです。テキストビューのプロパティをリセットせずに、テキストビューのテキスト属性を変更して、のattributedText便利な機能をすべて壊す方法はありUITextViewますか?

4

2 に答える 2

0

同じ問題があり、UITextView のattributedTextプロパティを設定するとtextViewDidChange:メソッドがトリガーされることが判明しました。そのため、 textViewDidChange:メソッド内からattributedTextプロパティを設定すると、無限ループが作成されました。

textViewDidChange:メソッドを呼び出すたびに、すぐにtextViewDidChange:メソッドから戻るという簡単な修正を行いました。うまくいっているようですが、まだいくつか確認する必要があります。

于 2013-05-14T11:31:08.990 に答える