- ベストアンサー
iPhoneアプリ開発におけるWebViewとTableViewの連携方法
- iPhoneアプリ開発において、TableViewとWebViewを連携させる方法を探しています。
- NavigationControllerを使用し、TableViewのセルタップでWebViewに記事を表示させるシンプルなアプリを作成しています。
- しかし、直前の表示状態を保ったまま、スワイプで再表示する機能を実装する方法に悩んでいます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
UINavigationControllerで実現できます。Viewをコピーする必要もありません。 要は、生成した新しいViewControllerを呼び出し元のViewControllerが覚えて おけばよいだけです。 そうすれば、ナビゲーションバーの戻るボタンやpopViewControllerで 画面から削除されても、インスタンス自体は呼び出し元のViewControllerが 覚えていますから破棄されません。そうしてViewControllerを変数に 保持しておいて、また表示が必要になったらpushViewControllerで 表示すればいいだけです。 なお、この場合viewDidLoadはインスタンス生成時に1度だけ呼ばれ、 viewWillAppearは表示を開始するたびに呼ばれます。 質問をベースにもう少し具体的に説明します。 TableViewを表示するViewControllerをVC1、 WebViewを表示するViewControllerをVC2とし、 UINavigationController配下でVC1→VC2への遷移が segueのpush動作により行われているものとします。 まず、VC1に以下のプロパティを追加します。 @property (nonatomic,strong) VC2 *nextVC; そして、以下のようにVC1のprepareForSegueメソッドの中で、 遷移先時に新規生成したVC2をVC1のプロパティに覚えておきます。 VC2 *vc = [segue destinationViewController]; _nextVC = vc; VC1でスワイプ動作を定義したり、ナビゲーションバーに「次へ」ボタンを 設置したりして、一度表示したことのある画面を再表示する指示を受け付ける ようにしたら、その受け付けメソッドで [self.navigationController pushViewController:_nextVC animated:YES]; を実行すれば、一度表示したことのある画面が戻る直前の状態で再表示されます。
その他の回答 (1)
- harawo
- ベストアンサー率58% (3742/6450)
UINavigationControllerの代わりに、UITabBarControllerを使うというのは、どうでしょうか? UINavigationCotrollerは、ViewControllerをスタックするので、ViewControllerの生成と解放が伴いますが、UITabBarControllerは、所属しているViewControllerを終始メモリに保持しています。 UITabBarControllerのタブバーは、 self.tabBarController.tabBar.hidden = YES; // selfは、最初に表示されるViewController で非表示にできますから、そこにTabBarControllerが使われていることを、ユーザに意識させることはありません。 UINavigationControllerを、UITabBarControllerに置き換えるというのではなく、ふたつを組み合わせて、ユーザインターフェイスを構成するというふうに考えてもいいでしょう。
お礼
すごく柔軟的なアイデアですね!参考になります。 今回の問題は他の方の解決策で問題は解消しましたが今後このアイデアを生かしていきたいと思います。 回答、ありがとうございました!
お礼
分かりやすい説明ありがとうございました。 おかげで簡単に目的の機能を実装できました。 またお世話になることがあればよろしくお願いします。 ありがとうございました!