0

テキストの開始位置と終了位置を制御する必要がある UITextView があります。

これは、UITextView の背景画像としてバブルを使用し、バブル画像内にテキストを表示する必要があるためです。

これまでのところ、テキストを使用して開始する場所を制御できました。

self.contentOffset = (CGPoint){.x = -10, .y = -10};

しかし、テキストの終了位置を制御する方法がわかりません。現在、デフォルトではすべての UITextView 幅を使用します。

4

2 に答える 2

1

テキストが伸びるとバブルの高さが大きくなりますか? それとも、バブルは 1 行に制限されますか? いずれにせよ、この問題に対処するには別のアプローチを使用する必要があると思います。

NSString インスタンスで使用-sizeWithFont:constainedToSize:lineBreakMode:して、テキストのサイズを把握します。サイズが許可された値よりも大きい場合は、入力の許可を停止するか (それが目的の場合)、バブルの高さを上げて、テキストが次の行に続くようにします。

-textView:shouldChangeTextInRange:replacementText:通常、これらの再計算はテキスト入力時に実行します。つまり、上記の提案に従ってUITextViewDelegate メソッドを実装します。

- また -

textView のサイズを制限し、lineBreakMode と numberOfLines を設定するだけでも目的に十分な場合があります。

于 2013-02-10T06:51:07.523 に答える
0

define #define TEXT_LENGTH 25 //制限が何であれ

UITextViewは、ユーザーが新しい文字を入力するか、既存の文字を削除するたびに、このメソッドを呼び出します。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSUInteger newLength = (textView.text.length - range.length) + text.length;
    if(newLength <= TEXT_LENGTH)
    {
        return YES;
    } else {
        NSUInteger mySpace = TEXT_LENGTH - (textView.text.length - range.length);
        textView.text = [[[textView.text substringToIndex:range.location] 
                                            stringByAppendingString:[text substringToIndex: mySpace]]
                                         stringByAppendingString:[textView.text substringFromIndex:(range.location + range.length)]];
        return NO;
    }
}

replacementText メソッド内でnotを使用するreplacementStringため、replacementString と replacementText の違いに注意してください。

于 2013-02-10T06:37:43.207 に答える