2

自動サイズ変更可能なUITextViewを含むOwnerDrawnElementを使用して作成されたカスタムセルがあります。テキストが変更された場合は、適切なレイアウトの再描画とセルの高さの再計算が必要です。問題は、開いたキーボードをどのように保持するかです。UITableView内にメソッドがあります-ReloadRowsは、実際に何らかの形で私を助けてくれました。ファーストレスポンダーで辞任できないので、自分のセルで呼び出すことはできません。しかし、別のセルを呼び出すと、セルのサイズが希望どおりに変更されますが、別のセルを再描画する必要はありません。それで、UITableViewをリレーアウトしてデータをリロードしないためにどのメソッドが呼び出されるのだろうか?!上下にスクロールすると、セルが表示され、高さが再計算されるときに、同じメソッドが呼び出される可能性があります。

標準のSetNeedsDisplay()、SetNeedsLayout()、ReloadInputViews()、LayoutSubviews()を試しましたが、同じことはしませんでした。多分私はそれらをどういうわけか異なって使う必要があります。セルおよびテーブルビューオブジェクト全体に対してそれらを呼び出そうとしました。

ReloadRowsメソッドを調べたところ、いくつかのAPIが呼び出されていることがわかりました。

Messaging.void_objc_msgSendSuper_IntPtr_int(base.SuperHandle、UITableView.selReloadRowsAtIndexPathsWithRowAnimation_、nSArray.Handle、(int)withRowAnimation);

したがって、データをリロードせずにテーブルビューに各セルの高さを再計算させる方法もありません。

それを手伝ってくれませんか。

4

1 に答える 1

5

セル フレームを更新してから、UITableView の空の更新ブロックを呼び出します。

tableView.BeginUpdates();
tableView.EndUpdates();
于 2013-01-27T11:02:36.163 に答える