0

を使用しUITableViewてアイテムのリストを表示し、行が選択されると、そのアイテムをその隣の詳細ビューに表示します (分割ビュー コントローラーを使用)。

テーブルビューの選択が変更されると、詳細ビ​​ューも変更されます。これはもちろん標準的な動作であり、問​​題なく動作します...テーブルビューで行が選択されていない場合を除きます。

たとえば、ユーザーはテーブル ビューから行を削除できます。削除中および削除後も、テーブル ビューで選択された行はありません。もちろん、行が削除された後、詳細ビューコントローラーに通知しますが、テーブルビューでの編集プロセス中に行が選択されていない場合、詳細ビューコントローラーはこれを認識しません。

を使用しようとしましたUITableViewSelectionDidChangeNotificationが、選択解除が発生したときではなく、ユーザーが別の行を選択したときにのみ送信されます。

テーブル ビューで行が選択されている状態から選択されていない状態に切り替わったことを通知するにはどうすればよいですか?

編集:

一時的な解決策として、編集ボタンの名前を「並べ替え」に変更し、A から B への行の移動のみを許可し、削除コントロールを許可しないようにしましたが、これは実行できません。行の編集を有効にしないと移動コントロールはありません。 . 問題は、移動する行へのポインターを取得するので、それを選択したままにすることができるということです。削除する行のこのポインターを取得できないので、私には向いていません。ユーザーが作業している行を常に知り、その行を常に選択したままにします。

標準の編集動作を捨てて、独自のボタンとメソッドを追加する必要があるかもしれません。または、任意の行でのタッチをキャプチャするためにジェスチャで何ができるかを確認してください...

4

4 に答える 4

3

物件ありますindexPathForSelectedRow。選択された行がない場合に何が返されるかはわかりませんが、選択された行があるかどうかを知るためのトリガーとして使用できる nil などを返す場合があります。何かのようなもの

if (myTable.indexPathForSelectedRow == nil)
{
  //do something here to account for no rows being selected
}
else
{
  //do stuff here to set up your detail view
}

これがうまくいくかどうか教えてください。

于 2012-11-09T13:52:27.413 に答える
0

わかりました、私はあなたが最初に尋ねていたことを読み違えまし – tableView:willDeselectRowAtIndexPath:– tableView:didDeselectRowAtIndexPath:. これらのメソッドは、ユーザーが行の選択を解除したときに自動的にトリガーされます (行の選択が解除される直前または直後)。これらのいずれかをテーブル ビュー デリゲート コードに実装すると、行が選択解除されるたびにわかり、次の行またはこれらのメソッドのいずれかで必要なものを選択するコードを配置できます。

于 2012-11-09T14:38:14.077 に答える
0

行の削除をどのように実装していますか? 次のデータ ソース メソッドを実装していますか?

tableView:commitEditingStyle:forRowAtIndexPath:

次のようなプロパティを持つことができます

NSIndexPath *selectedIndexPath

行が削除されているときは nil に設定します。

例:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
   //select another row in your table
   [tableView selectRowAtIndexPath:*indexPathOfTheRowToBeSelected* animated:YES scrollPosition:UITableViewScrollPositionNone];
   //then delete row from data source
}

上記のメソッドは、ユーザーが削除対象として選択したテーブルの削除ボタンをタッチすると呼び出されます。

于 2012-11-09T11:28:26.693 に答える