10

ストーリーボードには、UINavigationController にフェードする入門ビュー コントローラーがあります。

      |   |      |   |
   -> |   |  ->  |   |     
      |   |      |   |
     ViewCtrl   NavCtrl

アプリデリゲートからナビゲーションコントローラーへの参照を取得したいと思います(@Guillaumeの回答がこの質問で行うように)。

アクセスしようとしている方法は次のとおりです。

UIApplication.sharedApplication.delegate.window.rootViewController.navigationController;

しかし、ナビゲーションコントローラーはゼロです。

navController が nil である理由、またはそれへの参照を取得するためにできることはありますか?

4

2 に答える 2

2

Arsenのソリューションは良さそうに見えますが、ストーリーボードの名前を取得する方法がわかりませんでした笑。私にとってうまくいったのは

UINavigationController *navigationController = (UINavigationController*)_window.rootViewController;
AVDashboardViewController *dashBoardViewController =
(AVDashboardViewController*)[navigationController.viewControllers  objectAtIndex:1];//since on index 0 I have my login screen and index 1 is the home screen

AppDelegate で NavigationController の参照を取得することは、悪いコーディング手法のように思えるかもしれませんが、私の場合はそれが必要でした。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

これは、通知を受信したときに呼び出されるメソッドの 1 つです。メッセージを受け取った後、ナビゲーションコントローラーを更新する方法にも苦労したので、トピックから外れているかもしれませんが、無料のヒントを次に示します。

UIBarButtonItem *notiButton = [[UIBarButtonItem alloc] initWithTitle: @"Received push!" style: UIBarButtonItemStyleBordered target:self action:nil];

[[dashBoardViewController navigationItem] setLeftBarButtonItem:notiButton animated:YES];

[navigationController popToViewController:dashBoardViewController animated:YES];

それが役に立てば幸い!

于 2014-02-25T18:39:09.557 に答える