TableViewの更新に関して厄介な問題が発生しました。さまざまな更新方法を使用してさまざまな結果が得られます。
状況1:使用する[tbl reloadData];
ここで、tbl
はTableViewを更新するために、TableViewを更新します-意図したとおりに動作します。
状況2:私は使用します:
[tbl beginUpdates];
[tbl reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];
[tbl endUpdates];
tbl
はTableViewであり、indexPaths
はTableViewに存在するすべてのindexPathを含む配列です。これで、配列は問題なく、すべての正しいindexPath(doubleおよびtripleチェック済み)が含まれていますが、何らかの理由で-これは意図したとおりに機能しません。
今、私はこれがXYの問題(Yを求めるが、Yを解くとXが解決すると思うので私の問題は本当にXである)であり、それはXを説明するのが少し複雑だと感じるからです簡単な方法なので、可能であればそれを控えたいと思います。
だから、私の質問まで: TableViewを更新する2つの方法に違いはありますか(もちろん、アニメーションのビットは別として)、または問題が他の場所にあると疑うべきですか?
編集:さて、私は症状が何であるかを説明しようとします:
cellForRowAtIndexPath
- methodで、次のように、セルのindexPath行に等しいタグが割り当てられたボタンを各セルに追加します。
btn.tag = indexPath.row;
これを行う理由は、すべてのボタンが同じ関数を呼び出すため、各ボタンを識別できるようにするためです。
- (void)btnPressed:(id)sender
その後、セルを更新すると-セルの一部の値が変更されたため-状況1ではすべてが正常に機能しますが、状況2では-タグが混同されるため、次にボタンの1つが押されると正しいタグがなくなります。
混乱は私にはランダムに見えますが、ランダム化は最初に押したセルボタンによって異なります。これが私の問題を明らかにすることを願っています。
UITableView
ドキュメントから
beginUpdates
レシーバーの行とセクションを挿入、削除、または選択する一連のメソッド呼び出しを開始します。
つまり、挿入、削除、または選択しない限り、これを使用しないでください。あなたはこれらのどちらもしていません。
また、beginUpdates
はendUpdates
ではなく、reloadData
で終了する必要があります。ドキュメンテーション:
このグループのメソッドは、endUpdatesの呼び出しで終了する必要があります。
後続の挿入、削除、および選択操作(たとえば、cellForRowAtIndexPath:およびindexPathsForVisibleRows)を同時にアニメーション化する場合は、このメソッドを呼び出します。
これがあなたの望むものだと思います。 beginUpdatesおよびendUpdatesは、アニメーション付きのUItableviewを変更できます。