2012-03-13 11 views
0

背景:クエリのUITableViewは、「削除」ボタン

Iは、配列のデータを表示するのUITableViewを有します。私は配列の数が0より大きいときにKVOを使ってナビゲーションバーに "編集"ボタンを表示し、カウントが0のときに自分自身を削除します。これはうまくいきます。編集時には、右のバーボタン項目として「削除」バーボタン項目を配置します。これもうまくいきます。削除ボタンは、デフォルトで有効になっています。テーブルビューにはmultipleSelectionDuringEditingがYESに設定されています。複数のアイテムを選択して適切に削除することができます。私の目標は、少なくとも1つの項目が選択されるまで「削除」ボタンを無効にして編集を入力し、選択肢が0のときに無効にすることです。私はいくつかのことを試しましたが、彼らは無益でした。私は、NSMutableSetプロパティ(プライベート)を持っていて、それをカウントし、Deleteボタンを適切に有効/無効にすることを監視できるようにしようとしました。しかし、私は壁に立ち向かっている。 tableView:DidSelectRowAtIndexPath:編集中の最初の選択時にのみ呼び出され、行が選択解除されているときは呼び出されません。私は編集モードでテーブル選択を監視する機能を見落としていますか?前もって感謝します。

「削除」ボタンをUIToolbarに移動して「すべて削除」ボタンを追加する場合は、すべての行(表示されていないものも含む)を選択する方法はありますか?

+0

テーブルビュー:DidSelectRowAtIndexPath:は、行が選択解除されても呼び出されません。これは正しいですが、tableView:didDeselectRowAtIndexPath:ISが呼び出されたので、変数をそこで更新できます。 – lnafziger

+0

さて、私はその方法を完全に見落としたことを以下に述べました。私は疲れた目だと思います。ありがとう! –

答えて

1

文書によれば、テーブルビューの-indexPathsForSelectedRowsを呼び出すと、現在選択されている数がわかり、デリゲートの-tableView:didDeselectRowAtIndexPath:を呼び出す必要があります。

プログラムで複数の行を選択する便利な方法はありません。 「すべてを削除」コマンドを実行している場合は、基礎となるモデルオブジェクトを削除し、テーブルを更新するように指示する方が適切です(つまり、すべてを最初に選択する心配はありません)。 -deleteRowsAtIndexPaths:withRowAnimation:および/または-deleteSections:withRowAnimation:を使用してアニメートできます。どちらの方法でも、削除する行/セクションを自分で列挙しなければならないが、テーブルのセクション/行とモデルオブジェクトのコレクション間の対応は、特にすべてをヌックにしているので、かなり単純でなければならない。

+0

ありがとう! -tableView:didDeselectRowAtIndexPathを完全に見落としました。削除する前に選択内容を管理する必要があると私は確信しています。複数の行を選択することに関して、私はMessages.appがどうやってそれをするのかについてはあまり注意を払わなかったと思います。行はすべて「Clear all」で選択されているわけではありません。アクションシートが提示され、それらが拭き取られます。 –

関連する問題