2009-05-14 14 views
1

********テーブルビューがモデルに影響を与えていない場合**********UITableViewメソッド "deleteRowsAtIndexPaths:withRowAnimation:"は何をしますか?

に疑問を更新: 画面上のセルのインデックスパスは、彼らの実際の位置を反映するように変更されますまたは、reloadDataが呼び出されるまで、削除されたセルのインデックスが非表示になっていますか?

*******元の質問**********

私はそれを削除するために、細胞をマークし、削除をアニメーション化知っているが、それは、モデルに何をするのでしょうか?

モデルにはまったく影響しますか(私は想像できません)?

セルはまだ「存在していますが、見えませんか?

ユーザーがスクロールを開始すると、削除されたインデックスの代理コールがスキップされますか?

モデルを更新する予定ですか? (NSArrayの*)indexPaths withRowAnimation:

は...

答えて

5
  • (無効)deleteRowsAtIndexPaths私がこれまで読んだものから、漠然としたようです(UITableViewRowAnimation)アニメーション。

tableViewから行を削除します。あなたのモデルはまったく変更されません。あなたはそれを自分でする必要があります。セルは削除されますが、モデルから行を削除する前にreloadDataを呼び出すと、セルが削除されます。セルが再び表示されます。

はい、あなたはモデルを更新する必要があります。

+0

は、画面上のセルのインデックスパスは、彼らの実際の位置を反映するように変更されていることを意味信じられていますreloadDataが呼び出されるまで、削除されたセルのインデックスは見えませんか? –

+4

-insertまたは-deleteメソッドを使用した後に、-reloadDataを呼び出す必要はありません。それらはテーブルビュー自身の行リストを適切に更新します。索引に関する限り、テーブルビューは特定のインデックスパスにどのアイテムがあるかを尋ねるので、テーブルビューが新しい行を要求するときに正しいものを提供するように、モデルを変更するのはあなた次第です。 –

+0

これは理にかなっています。削除と挿入の方法は、テーブルに契約または拡張を指示するだけです。必要ならばモデル全体の配列を単純に交換することができます –

1

UITableViewはVIEWであり、UIKitは強力なMVCベースであることを覚えておいてください。モデルを更新したままにするのはあなたの責任です。実際には、モデルの変更を観察(または通知)したことに応じて、おそらくコントローラは(void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;に電話をかけます。

たとえば、UIに「10個のランダムなアイテムを削除」があるとします。このため正しい流れがある:

  1. ビュー - ボタンを押し更新モデル
  2. コントローラを受け取り - - モデル
  3. ビューの更新リストにおける変化

なおを観察するユーザは、ボタン

  • コントローラが押下しますちょっと工夫されているように感じます。なぜなら、ビューをリストを更新してモデルに伝えるのはなぜでしょうか?理解しやすく、UIKitでうまく動作するbette rcodeを作成します。たとえば、このデザインでは、2と3のコントローラーが同じコントローラーであると想定していないので、柔軟性があります。

    私は普通のデザインをいただけれするYAGNIを適用するが、私は強いMVCフォーカスのOSのUIKitはYAGNTは(あなたが...つもりARE)

  • +0

    これは実際に私が適切にしているものです。私の唯一の競合のポイントは、トランジションをアニメートするためにテーブルビューを取得することです。データをリロードするだけではこれはできません。私はアニメーションを(私が言う限り)起こすために、データの変化を指摘しなければなりません。 –

    +0

    データが正しい場合は、reloadDataが機能します。デバッガでそのことを確認する必要があります。あなたはコントローラが 'deleteRowsAtIndexPaths'を使用することもできます(それはモデルから削除されたものを知っている必要があります:-))。 –

    +0

    私はモデルの全販売スワップを実行しています(あるアレイを別のアレイに置き換える)。実際には、それは分かりません。私は、コントローラ内の2つの配列間で何が違うのかを把握し、それを計算してから、 "deleteRowsAtIndexPaths"を呼び出す必要があります。私はそれが少し過度だと思ったが、今はアニメーション機能を使用するときにほとんどの人がモデルを更新する方法ではないかもしれないことを理解する。 –

    関連する問題