1

UITableViewCellサブクラス内にUITextViewがあります。テキストビューとセルの新しい高さを取得するのに問題はありません。私が抱えている問題は、UITableViewに更新を指示することです。

heightForRowAtIndexPath:TextViewが展開するときにセルのライブの高さを返すように実装しました。

しかし、どこかで `[tableView beginUpdates]; [tableView endUpdates]; 呼び出す必要があります。

どのように?UITableViewControllerサブクラスに設定されているUITableViewCellにデリゲートプロパティを追加する必要がありますか?そして、セルが高さを拡張し、テーブルビューを更新する必要があるときに、デリゲートメッセージを送信しますか?UITableViewCellとControllerの間にデリゲートがあるのは少し奇妙に思えますか?

NSNotificationCenterを使用してみましたが、編集可能なセルが複数あり、この性質のテーブルビューが複数あります。したがって、同じ行をコピーして貼り付けることなく、セルの通知のみを登録する方法はありません。これは、(セルがIBで作成され、配列またはセットに含まれていないため)、複数あるのは良くありません。 tableviewsは、更新するように指示されたが何も変更されないため、他のテーブルビューで例外が発生することを意味します。

このトピックに関する多くの質問と回答を見てきましたが、テーブルビューの更新に関しては、すべて「テーブルビューを更新する」とだけ言っており、その方法はありません。では、セルの1つから、テーブルビューを更新するように指示するにはどうすればよいですか?

4

2 に答える 2

1

UITableViewControllerこの動作は、ビュー自体()ではなく、で実装するのが最適だと思いますUITableViewCell

コントローラーはセルの高さを設定する責任があり、通常はの代理人になるUITextViewので、これらすべてをコントローラーに処理させます。

textViewDidChangeメソッドで、セルの新しい高さを計算し、それを反映するようにデータ構造を更新して、実際に変更するように呼び出しますreloadRowsAtIndexPaths:withRowAnimation:

編集:
私の最初の提案が気に入らなかったので、これを行う別の方法はrecommendedRowHeight、カスタムにプロパティを追加することUITableViewCellです。

次に、からこのプロパティを監視するか、次UITableViewControllerの行に沿ったメソッドを使用してデリゲートプロトコルを実装できます。

- (void)recommendedRowHeightDidChange
// or 
- (void)recommendedRowHeightDidChangeTo:(CGFloat)newHeight

次に、身長が変わったら、recommendedRowHeightプロパティを更新し、そのルートに行く場合はデリゲートのメソッドを呼び出します。

いずれにせよ、コントローラーがセルの推奨される行の高さが変更されたことを認識すると、コントローラーは想定どおりの処理を実行できます。現在の行の高さを反映してデータ構造を更新してから、を呼び出しますreloadRowsAtIndexPaths:withRowAnimation:

于 2012-05-26T01:11:59.637 に答える
0

テーブルビューセルクラスへの弱参照として、テーブルビューコントローラオブジェクトを追加できます。また、テーブルビューコントローラでは、テーブルビューセルクラスから呼び出されるメソッドを使用できます。

于 2012-05-26T04:06:58.267 に答える