web-dev-qa-db-ja.com

UINavigationControllerでスタックにアクセスする方法

viewControllers

現在ナビゲーションスタックにあるView Controller。

@property(nonatomic, copy) NSArray * viewControllers

ディスカッション

ルートビューコントローラーは配列のインデックス0、バックビューコントローラーはインデックスn-2、トップコントローラーはインデックスn-1にあります。nは配列内のアイテムの数です。

ビューコントローラーの新しい配列をこのプロパティに割り当てることは、アニメーション化されたパラメーターをNOに設定してsetViewControllers:animated:メソッドを呼び出すことと同等です。

スタックにアクセスする方法が混乱しています。NavigationControllerには、ルートビューコントローラー、stiテスト場所、stiマップの3つのビューがあります。

スタックにアクセスするにはどうすればよいですか?

23
Dheeraj Kaveti

UINavigationControllersには、上記で説明したviewControllersというプロパティがあります。これはView Controllerの配列であるため、この階層内の特定のView Controllerを参照することは、配列内の他のオブジェクトにアクセスすることと変わりません。

UIViewController *theControllerYouWant = [self.navigationController.viewControllers objectAtIndex:(theIndexOfYourViewController)];

さらに、iOS Developer Libraryの Navigation Controllers の記事、特に「Navigation Stackの変更」というセクションをご覧ください。

46
Convolution

Navigation Controllerに3つのView Controllerがあることを意味すると仮定すると、self.navigationControllerを使用して3つのView ControllerのいずれかからNavigation Controllerにアクセスできるはずです。

スタック内の2番目のView Controllerを取得したい場合は、次を実行する必要があります–

UIViewController * viewController = [self.navigationController.viewControllers objectAtIndex:1];

これは、Navigation Controller上に少なくとも2つのView Controllerがあることを前提としています。

5

ViewControllersプロパティによって返される配列はスタックです。それらは表示されたのと同じ順序で並べられます。インデックス0のコントローラーは、最初に使用したコントローラーです。現在見ているコントローラーは最高のインデックスです。インデックスはゼロからカウントされるため、最後のアイテムインデックスはカウント(n)-1になります。

投稿で「ビュー」と言います。ビューとView Controllerには違いがあります。すべて同時に表示される複数のピースについて話している場合、ビューコントローラーではなくビューについて話していることになります。 Navigation Controllerは、複数のView Controllerを処理するためのものです。ビューを扱っている場合、現在のView Controllerのビューのサブビューにアクセスしたい場合はmyViewController.view.subviews彼らは同様の方法で自分自身を注文します。

4
Dancreek