Master Detail テンプレートの調整:その2

Master Detail テンプレートの調整が済んだと思いきや、データを削除した際の挙動がおかしいことに気づいてしまった。

具体的には、iPad など、split view 表示されてしまう場合に、Master でデータを削除すると detail に表示していたレコードはなくなっているので、状態に応じたレコードを表示しなければ辻褄が合わなくなる。テンプレートのままではこういった自体を想定していないのか、消したレコードがそのまま表示されるている。

データは消えているのに情報が表示されているわけで、アプリ利用者としては??感が強いだろうし、消したのに back ボタンでまた保存が走るのも製作者としては回避したいところ。

どうしたものかと source をいじっていたら、Master の実装ファイルに以下の method を発見。データを削除したら実行される。

- (void)tableView:(UITableView *)tableView

commitEditingStyle:(UITableViewCellEditingStyle)editingStyle

forRowAtIndexPath:(NSIndexPath *)indexPath

この method 内に何か工夫を凝らすことで、レコードを削除した場合の挙動を実装できないか。色々調べたところ、画面が今 split view 表示かどうかは property で調べられることが判明。

self.splitViewController.isCollapsed

これで true が返ってくれば split view されていないことを意味する。false なら split view の状態。

split view されているかどうか判別が付くようになったものの、削除されたためレコードはないのだが、detail に何を表示するべきか。既に実装されている method を呼ぶのが省力化に繋がるだろうとの考えから、segue を呼んでみた。

            [self performSegueWithIdentifier:@"showDetail" sender:self];

うまくいったようで、detailItem が nil の時の挙動が実現された。

っって、分かってしまえばどうってことないのだが、分かるまでが大変なもので・・・