3

私が持っているもの:

セルを持つ UITableView。このセルには、サブビューとして UITextView があります。すべてのデリゲートとデータ ソースが正しく設定されています。セルの高さは、heightForRow などから正しく取得されます。ユーザーは textView にテキストを入力します。

私がやろうとしていること:

textView をファーストレスポンダーとして辞任することなく、ユーザーが入力したときにセルの高さを更新したい。stackOverflow に関する多くの投稿では、空の beginUpdates/endUpdates がこれに有効であると述べています。

私が試したこと:

1- textViewDidChange 内で beginUpdates と endUpdates (tableView 用) を呼び出しました。何も起こらなかった。(注: すべてのデリゲートが正しく設定されています)。

2- textViewDidEndEditing 内で beginUpdates と endUpdates を呼び出して確認しました (textView がファーストレスポンダとして辞任した後に機能するかどうかを確認するため)。機能します(textViewがfirstResponderとして辞任すると、セルのサイズが変更されます)。

3-次に、textViewDidChange 内で reloadData を試しました。textView を最初のレスポンダーとして辞任することを除いて、機能します(キーボードは、入力されたすべての文字で消えます)。

4-次に、reloadDataを試してから、textViewにもう一度becomeFirstResponderを直接指示しました(キーボードを上げたままにします)。機能しますが、これにより、textView のカーソル位置とオートコレクトとバックスペースに関する多くの問題が発生します。

5-次にreloadDataを試し、キーボードを動かしたくないときにtextViewShouldEndEditingでNOを返しましたが、何らかの理由でセルの高さが更新されませんでした。

6- 最後に、reloadRowsAtIndexPaths などを試し、textViewShouldEndEditing で NO を返しましたが、ResignFirstResponder を拒否するオブジェクトを削除できないというエラーが表示されました。

また、textViewDidChange 内で reloadInputViews や setNeedsDisplay や​​ setNeedsLayout などのメソッドを試しましたが、何も起こりません。

私の質問:

#2は、サブビューの1つがfirstResponderである間、セルがその高さを更新できないことを示唆しているように思えます。そうですか?これに関するドキュメントはありますか (見つかりませんでした)。

beginUpdates/EndUpdates が機能しないのはなぜですか? 機能しない既知の、または一般的なケースはありますか? 私の設定方法に何か問題があるのでしょうか?ただし、サイズ変更は #3 と #4 で完全に機能します (すべてのデリゲート メソッドなどが正しく設定されていることを示しています)。

非常に長い質問で申し訳ありませんが、私が投稿したもの以外のアイデアを誰か教えてもらえますか? 私が見逃しているのは、非常にばかげた明らかなものだと感じています(いつものように)...

ところで、私はiOSシミュレーターと5.1の実際のiPhoneの両方を使用しています

4

1 に答える 1

2

私の小さなデモアプリでは完璧に動作します。コードが textView デリゲート メッセージを取得し、すべてのセルに適用される ivar の高さを設定してから、begin/end を呼び出すことに注意してください。セルは文字を押すたびにすべて大きくなります。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Asked for Height");
    return height;
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSLog(@"Text");
    height += 10;
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
    return YES;
}
于 2012-09-06T11:32:25.210 に答える