- ベストアンサー
iPhoneアプリ開発:ディレクトリ階層の管理とテーブルビュー表示について
- iPhoneアプリ開発時のディレクトリ階層の管理とテーブルビュー表示において問題が生じています。
- ディレクトリ間の戻るボタンの検知について、ルートフォルダから次のフォルダに進む分には問題ありませんが、次のフォルダからさらに次のフォルダに戻るときに問題が発生しています。
- UITableViewControllerを使用して複数のコントローラーを使用せずにテーブルビューにディレクトリの内容を表示していますが、次のフォルダから次のフォルダに戻るボタンの検知方法がわかりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。追伸します。 > > didSelectRowAtIndexPathメソッドに > > UITableViewController *nextDir = [[UITableViewController alloc] init]; > > nextDir.tableView.delegate = self; > > nextDir.tableVIew.dataSourse = self; > とのことですが、本当にこの通り書いているのですか? > > NextDirViewController *nextDir = [[NextDirViewController alloc] init]; > nextDir.tableView.delegate = nextDir; > nextDir.tableVIew.dataSourse = nextDir; > としないんですか? 見落としていました。 nextDir→nextDir間の戻るボタンが検知されない直接の原因は > UITableViewController *nextDir = [[UITableViewController alloc] init]; の部分です。 これだとNextDirViewControllerでなくUITableViewControllerのインスタンスが 生成されますから、NextDirViewControllerのviewWillDisappearは呼ばれず、 UITableViewControllerのviewWillDisappearが実行されるだけです。 No.1回答で書いた通り > NextDirViewController *nextDir = [[NextDirViewController alloc] init]; とする必要があると思います。 delegateやdataSourceの設定とか、そもそもフォルダ名取り除き処理の必要性とか そんなところばっかり気になって、今回の質問の直接原因になるところを見落としていました。
その他の回答 (1)
- Lchan0211b
- ベストアンサー率61% (573/930)
よく似た構成のプログラムでviewWillDisappearのタイミングで ([self.navigationController.viewControllers indexOfObject:self] の値を確認したところ、戻るときにはNSNotFoundが得られますので この方法で大丈夫だと思います。 以下のURLにも同じ方法が紹介されていました。 http://ameblo.jp/satoko-ohtsuki/entry-11369448573.html ただ、 > didSelectRowAtIndexPathメソッドに > UITableViewController *nextDir = [[UITableViewController alloc] init]; > nextDir.tableView.delegate = self; > nextDir.tableVIew.dataSourse = self; とのことですが、本当にこの通り書いているのですか? NextDirViewController *nextDir = [[NextDirViewController alloc] init]; nextDir.tableView.delegate = nextDir; nextDir.tableVIew.dataSourse = nextDir; としないんですか? 気にしているのはdelegateやdataSourceにnextDirでなく selfを指定している点です。 もしこの通りだと、新しく生成したビューコントローラーのテーブル 表示は、呼び出し元のビューコントローラーのメソッドが行うことに なります。 このことが何か勘違いを生み出し、意図した通りに動作しない原因に なっているような気がするのですが、どうでしょうか? それと、そもそも戻る際にパスの後ろに足されたフォルダ名を 取り除こうとしている理由がわかりませんでした。 テーブルビューコントローラーのタイトル表示等、 どこかに現在のパス名を表示したい(または覚えておきたい)のであれば、 新しいテーブルビューコントローラーを生成した時に フォルダ名を追加して新しいパスを生成し、それをテーブルビューコントローラー の中に表示する(または覚えておく)だけよいように思えます。 移動先のテーブルビューコントローラーから戻ってきたら、 元のビューコントローラーには自分が今表示している パス名が表示(または保存)されたままになっているはずです。 (つまり、取り除かなくても元のビューコントローラーには 元の値が維持されているはずです)
お礼
再び回答ありがとうございます。 自分でも混乱していたのですがおかげでなんとか解決しました。