2

OK、これはパズルです。似たような投稿が1件ありますが、数え切れないほど似ているので、こちらを投稿します。:)

ヘッダーとフッターを持つグループ化されたUITableViewがあります。フッターには、2 つのUIButtonビューが並んで含まれています。主要なものは何もありません。

さて…このテーブルビューの下部にあるUIToolbarにトグルボタンがあり、情報を増やしたり減らしたりできます。そこで、フェード行アニメーションを使用して削除/挿入するインデックス パスを構築し、通常のすべての要素を間に挟んでUITableViewbeginUpdatesendUpdates呼び出します。これで問題なく動作します。また、フッターがディスプレイの下部を越えて押し出されることもあります。

ここが変なところです。画面上で指をドラッグしてビューを上にスクロールすると、最終的にそのフッターが表示されるはずですよね?

ええと…ほとんどの場合、私はそうします。しかし、スクロールを速くするために指を上にフリックすると、フッターが表示されません。その領域をタップしようとしても、応答がありません。

ただし、もう一度下にスクロールして、そのフッターを非表示にする (またはフッターが通常ある領域を非表示にする) と、上にスクロールすると、再びそこに表示されます!

これは、行を挿入する場合にのみ発生します。行を削除すると、フッターはそのまま残ります…もちろん、すでに非表示になっていて、前述の呪文を実行して元に戻さなかった場合を除きます。:)

私はこれを追跡しようとしていますが、役に立ちません。スクロール操作をトレースするのはちょっとクレイジーな提案だと思います! おそらくいくつかの創造的なログ…提案、誰か? それとも、行の挿入/削除に関する 3.1 の既知の問題ですか? (3.1まで見た記憶がありません。)

4

2 に答える 2

0

私たちのアプリを進めていくと、再描画の問題に遭遇することが多くなりました。何時間も何時間も調査した結果、解決策は [tableView reloadData] の 1 つだけのようです。しかし、壊れたアニメーションには (私の最初の回答よりも) より良い解決策があります。これでアニメーションが終了し、「フラッシュ」がなくなるとすぐにメソッド呼び出しを取得できます。

[UIView beginAnimations:nil context:[NSNumber numberWithInt:section]];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
...do something on the table..
and commitAnimation

animationDidStop で、テーブルのリロードを行います。

しかし、特に、並べ替えに使用される属性が変更されるとすぐにデリゲート メソッドを独自に起動している fetchedResultsController を操作している場合、リロードの正しい瞬間/イベントを見つけるのは依然として難しいです。

これはまだ、セル ビューの更新に関する問題を回避するためのプログラミングの練習です。

于 2010-06-08T15:23:39.790 に答える
0

フッター ボタンから呼び出すメソッドで、フッターの何かを変更しようとしましたか。たとえば、フッターの UILabel のテキストを変更しますか? それが私がやろうとしていることです。BUT: フッターは更新されません。または、より正確に言うと、更新されますが、画面には表示されません。表示されている配列からフッターをスクロールして戻すと、正しいフッターが表示されます。そのため、更新の問題があります。

では、同じ再描画の問題が発生する可能性がありますか?

すべてのメソッド (needslayout needsDisplay など) を呼び出そうとしましたが、何も機能しませんでした。これを解決する唯一の方法は、テーブルまたはセクションのリロードですが、これにより、rowAnimation が強制終了されます。次に、通知が呼び出される前にアニメーションが終了することを期待して、通知を介してリロードを呼び出そうとしました。いいえ。最後に、スケジュールされたタイマーを使用して、行の挿入/削除の完了時に開始された 100 ~ 200 ミリ秒の遅延で reloadData を使用します。したがって、アニメーションはロード前に終了します。

現在は機能しているように見えますが、価格は更新される前にフッターが間違っている短い「フラッシュ」です。

アップデート

わかりました、Skie のサポートにより、再描画の問題を解決しました。これを参照してください。

このアプローチまたは少なくともアイデアがあなたのものも解決できるかどうかはわかりませんが、おそらく....

于 2010-04-26T11:48:48.513 に答える