viewControllers
現在ナビゲーションスタックにあるView Controller。
@property(nonatomic, copy) NSArray * viewControllers
ディスカッション
ルートビューコントローラーは配列のインデックス0、バックビューコントローラーはインデックスn-2、トップコントローラーはインデックスn-1にあります。nは配列内のアイテムの数です。
ビューコントローラーの新しい配列をこのプロパティに割り当てることは、アニメーション化されたパラメーターをNOに設定してsetViewControllers:animated:メソッドを呼び出すことと同等です。
スタックにアクセスする方法が混乱しています。NavigationControllerには、ルートビューコントローラー、stiテスト場所、stiマップの3つのビューがあります。
スタックにアクセスするにはどうすればよいですか?
UINavigationControllers
には、上記で説明したviewControllers
というプロパティがあります。これはView Controllerの配列であるため、この階層内の特定のView Controllerを参照することは、配列内の他のオブジェクトにアクセスすることと変わりません。
UIViewController *theControllerYouWant = [self.navigationController.viewControllers objectAtIndex:(theIndexOfYourViewController)];
さらに、iOS Developer Libraryの Navigation Controllers の記事、特に「Navigation Stackの変更」というセクションをご覧ください。
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があることを前提としています。
ViewControllersプロパティによって返される配列はスタックです。それらは表示されたのと同じ順序で並べられます。インデックス0のコントローラーは、最初に使用したコントローラーです。現在見ているコントローラーは最高のインデックスです。インデックスはゼロからカウントされるため、最後のアイテムインデックスはカウント(n)-1になります。
投稿で「ビュー」と言います。ビューとView Controllerには違いがあります。すべて同時に表示される複数のピースについて話している場合、ビューコントローラーではなくビューについて話していることになります。 Navigation Controllerは、複数のView Controllerを処理するためのものです。ビューを扱っている場合、現在のView Controllerのビューのサブビューにアクセスしたい場合はmyViewController.view.subviews
彼らは同様の方法で自分自身を注文します。