私は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
のすべてのそれらの便利な機能を壊すことなく、私のテキストビューのテキスト属性を変更する方法はありますか?
ちょっと後悔しています:textViewDidChange/shouldChangeでattributedTextを設定していて、実際にはバグではないことに気付いたときにレーダーをファイルしようとしていたときに、私は同じ問題が発生しました。新しい文字が入力されるたびにテキストビューがその内容を完全に変更するので、自動修正、二重スペースのショートカットなどは機能しません。私はCoreTextを探索する以外に、これに対する解決策を見ません。 – ntesler
iOS 7では、あなたが望むものを達成するために 'TextKit'を使うことができます。 – fatuhoku