1

以下のコードを使用して、textViewフレームのサイズを設定し、ボタンなどを押したときにtextViewのコンテンツ(入力されたテキスト)とほぼ一致するようにすることができます。フレームがインタラクティブに拡大または縮小するように、新しい文字が入力されるたびにこれをどのように呼び出すのですか?

- (IBAction)doneEditingText:(id)sender {
    [myTextView resignFirstResponder];
    [myTextView setFrame:CGRectMake(myTextView.frame.origin.x, myTextView.frame.origin.y, myTextView.contentSize.width, myTextView.contentSize.height)];
}

読んでくれてありがとう

4

3 に答える 3

4

編集

UITextViewデリゲートを.hファイルに実装します。

@interface ViewController : UIViewController<UITextViewDelegate>

yourTextViewがxibから追加された場合は、デリゲートをfileownerにバインドします。それ以外の場合は、ViewDidLoadに次の行を追加します。

yourTextView.delegate = self;

要件に応じてtextViewのデリゲートを使用します。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
   CGSize maximumSize = CGSizeMake(280,999); //specify width of textView  and maximum height for text to fit in width of textView
   CGSize txtSize = [textView.text sizeWithFont:[UIFont fontWithName:@"Arial" size:16] constrainedToSize:maximumSize lineBreakMode:UILineBreakModeCharacterWrap]; //calulate size of text by specifying font here
   //Add UIViewAnimation here if needed
   [textView setFrame:CGRectMake(textView.frame.origin.x,textView.frame.origin.y,txtSize.width+10,txtSize.height+10)]; // change accordingly
   return YES;
}
于 2012-08-31T10:29:41.853 に答える
3

あなたが望むのとほぼ同じ機能を持っているGITでこのリポジトリのようなものを使うことができます-

https://github.com/HansPinckaers/GrowingTextViewiPhone のメッセージアプリに似ています。

于 2012-08-31T10:24:47.153 に答える
3

これの実装は完了しました。現在(この回答を投稿した時点で)受け入れられた回答の問題は、デリゲートメソッドが次のことです。

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

ユーザーが入力/挿入/削除した変更がコミットされる前に、textViewを公開します。したがって、達成するサイズ変更は1文字遅れます。UITextViewはUIScrollViewから継承するため、テキストが画面からはみ出さないようになりますが、厄介な動作が発生する可能性があります。

私の解決策は、2つのデリゲート方法を使用して、サイズ変更効果を正しく実現することです。

ユーザーが入力した文字が画面に表示される前にUITextViewを展開します。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
NSMutableString *tempString = [NSMutableString stringWithString:textView.text];

[tempString replaceCharactersInRange:range withString:text];

//If we are adding to the length of the string (We might need to expand)
if([tempString length]>textView.text.length)
{
    //Create a temporaryTextView which has all of the characteristics of your original textView
    UITextView *tempTextView = [[UITextView alloc] initWithFrame:CGRectZero];
    tempTextView.font = _inputFont;
    tempTextView.contentInset = textView.contentInset;
    [tempTextView setText:tempString];

    //Change this to respect whatever width constraint you are trying to achieve.
    CGSize theSize = [tempTextView sizeThatFits:CGSizeMake(192, CGFLOAT_MAX)];

    if(theSize.height!=textView.frame.size.height)
    {

        textView.frame = CGRectMake(115, 310, 192,theSize.height);

        return YES;
    }
    else
    {
        return YES;
    }

}
else
{
    return YES;
}
}

そして、ユーザーがUITextViewのテキストの量を削除/縮小した後に縮小する文字

-(void)textViewDidChange:(UITextView *)textView
{
//We enter this method AFTER the edit has been drawn to the screen, therefore check to see if we should shrink.
if([textView sizeThatFits:CGSizeMake(192, CGFLOAT_MAX)].height!=textView.frame.size.height)
{
    //change this to reflect the constraints of your UITextView
    textView.frame = CGRectMake(115, 310, 192,[textView sizeThatFits:CGSizeMake(192, CGFLOAT_MAX)].height);


}
}
于 2013-01-31T15:06:02.200 に答える