1. ホーム
  2. ios

[解決済み] プッシュされたコントローラからRootViewControllerを取得するには?

2022-05-28 22:34:11

質問

ということで、RootViewControllerからビューコントローラーをプッシュしています。

[self.navigationController pushViewController:anotherViewController animated:YES] ;

しかし、FROM anotherViewController で、再びRootViewControllerにアクセスしたい。

を試しています。

// (今はanotherViewControllerの中)
///RootViewController *root = (RootViewController*)self.parentViewController ; // だめです。
// err
RootViewController *root = (RootViewController*)[self.navigationController.viewControllers objectAtIndex:0] ; // YES!!うまくいった。


なぜこれが動作するのか、またその方法がベストなのかよくわかりません。 RootViewControllerのnavigationControllerにプッシュしたコントローラからRootViewControllerを取得する良い方法と、私がやった方法が信頼できるかどうか、誰かコメントできませんか?

どのように解決するのですか?

この場合 viewControllers プロパティを使用します。コード例です。

// Inside another ViewController
NSArray *viewControllers = self.navigationController.viewControllers;
UIViewController *rootViewController = [viewControllers objectAtIndex:viewControllers.count - 2];

これは、"back" ビューコントローラを取得する標準的な方法です。そのため objectAtIndex:0 が機能する理由は、アクセスしようとしているビューコントローラがルートでもあるからです。もしナビゲーションの奥深くにいたなら、バックビューはルートビューと同じものではありません。