3

これができないのはばかげているようです。事前定義された属性付き文字列を書式設定付きのテキストビューに表示するように設定できますが、でのライブ入力に適用される一般的な書式設定を設定することはできませんUITextView

たとえば、テキストビューに何かを入力する前にこれを行うと、次のようになります。

NSString *string = @"Hello world";
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.minimumLineHeight = 50.f;
NSMutableAttributedString *aStr = [[NSMutableAttributedString alloc] initWithString:string];
[aStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0,[string length])];
mainTextView.attributedText = aStr;

次に、書式設定が表示され、キーボードでテキストを編集しても、書式設定は残ります。

UITextViewただし、空白から始めて、ユーザーがビューに入力するものすべてにフォーマットを適用したい場合はどうなりますか?

string = @""またはを設定してみstring = @" "ましたが、どちらもフォーマットを保持していません。ユーザー入力にフォーマットを適用する方法は本当にありませんか?属性付きの文字列プロパティを持つUITextViewのポイントは何ですか?

ドキュメントによると、のtextプロパティを設定するとUITextView、属性付きの文字列によって行われたすべてのフォーマットが完全に消去されます。したがって、解決策が何であれ、プロパティを直接設定textView.textするのではなく、attributedTextプロパティを微調整するだけで済みます。

4

3 に答える 3

7

私が質問を正しく理解していれば、これがのtypingAttributesプロパティのUITextView目的です。

つまり、次のようなことをしたいと思うでしょう。

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.minimumLineHeight = 50.f;
mainTextView.typingAttributes = [NSDictionary dictionaryWithObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
于 2012-10-17T21:23:16.097 に答える
3

問題の鍵は、このデリゲートメソッドです。

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

それを使って行うことは、プライベート文字列または属性文字列を保持することです。このメソッドが呼び出されると、提案された新しいキャラクターがどの位置に配置され、他のキャラクターを置き換える可能性があるかがわかります。プライベート文字列またはtextView.textのコピーを使用して変更することにより、完全な文字列があることがわかります。

新しい属性文字列を作成するか、既存の文字列を変更して、textViewに設定できます。

textView.attributedString = myNewString;

その後、NOを返します。NSStringには、範囲で指定された文字を他の文字で変更できるメソッドがすでに用意されているため、古い文字列の変更は簡単です。

于 2012-10-02T16:56:40.230 に答える
0

のデリゲートメソッドを使用しUITextViewて、使用がテキストを入力したときに通知を受け取るようにしてから、このメソッドのテキスト属性を変更する必要があります。

于 2012-10-02T15:37:31.640 に答える