1

ここに私の問題があります。 私はビューベースのアプリケーションを持っています。 AppDelegateに次のようにNavigationControllerを追加しました。IOS。ナビゲーションコントローラ。再利用ViewController

UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:_viewController];  
navigationController = [nvc retain]; 
[nvc retain];  
[self.window addSubview:navigationController.view]; 

このコードはインターネットから入手しました。それが正しいかどうかわかりません。

すべてのviewControllerでは、私は新しいビューをプッシュするために次のようにしています。

UIViewController *newViewController = [[NewViewController alloc] init]; 
[self.navigationController pushViewController:newViewController animated:TRUE]; 
  1. self.navigationControllerを押すビューでnilを返さない理由を私は知りません。それは何とかAppDelegateナビゲーションコントローラを使用していますか?

  2. いくつかのView Controllerを再利用したいのですが。私はビューコントローラを呼び出すたびにinitを割り当てるわけではありません。どうやってやるの? AppDelegateに参照を保存しますか?他の解決策?

  3. 私は複雑なナビゲーションを持っています。すなわち、A、B、Cはビューコントローラである。 AコールB. BコールC.コールA.電話を続けている場合は、毎回新しいView Controllerを作成しています。これらのビューコントローラを再利用するには(または、新しいビューを呼び出すときにポップしてビューをスタックから解放する)ことができますか?

ありがとう。

答えて

0

1)navigationControllerは、UIViewControllerのプロパティです。ビューコントローラがナビゲーションコントローラ階層の一部である場合、それは設定されます。

2)あなたはこれを自分で管理する必要があります。そのビューコントローラをプッシュするオブジェクトに参照を格納することは、これを実現する通常の方法です。したがって、AがBを押すとAはBなどへの参照を格納します。

3)これを行うにはUINavigationControllerを取得する方法はありません。あなたがしようとしていることから、私はあなたがAndroidの背景から来ていると思いますか? Androidには特別な方法がありますが、iOSでは自分でコードを作成する必要があります。 UINavigationControllerDelegateとその方法のnavigationController:didShowViewController:animated:を見ることでこれを行うことができます。ビューコントローラーがプッシュされていることを確認できます。スタックに既に入っている場合は、ナビゲーションスタック(viewControllersプロパティ:UINavigationController)を更新して、そのスタックを元の場所から削除できます。しかし、それはユーザーのためにかなり混乱するかもしれません。

+1

答えがNavigationControllerを使用していない可能性があります。それを使用せずに新しいView Controllerをプッシュする方法はありますか? 新しいビューコントローラをスタックに追加せずにプッシュするだけで、私の問題を解決できます。どう思いますか? – Tony

+0

これは、ユーザーがあなたのアプリとどのようにやりとりしたいかによってまったく異なります。 'presentModalViewController:animated:'を使って新しいView Controllerを表示することもできます。これにより、現在のUIの上に新しいView Controllerをモーダルにすることができます。 – mattjgalloway

+0

Matt、 ビューコントローラA、B、Cがあるとします。 Aが基本です。 AはBに行くことができます。BはCに行くことができ、CはBに行くことができます。BまたはCはAに戻ることができます:A-> B、B <-> C、C-> A、B-> A。 ナビゲーションコントローラをA、プッシュB、BがCを押してCを押しながら同時にAのナビゲーションコントローラのBをポップすることはできますか? 私は以下を持っています: - AはBを呼び出します。ナビゲーションコントローラスタック:A、B - BがCを呼び出します。ナビゲーションコントローラスタック:A、C - CがBを呼び出します。ナビゲーションコントローラスタック:A、B - BがAに戻ります。ナビゲーションコントローラスタック:A これは間違いありませんか?別のビューを呼び出した後、ビューをポップするにはどうしたらいいですか? – Tony

関連する問題