web-dev-qa-db-ja.com

iOS:アプリデリゲートからナビゲーションコントローラーにアクセスする

プッシュ通知を受け取るアプリがあります。 didReceiveRemoteNotificationsで、アプリのナビゲーションコントローラー(たまたまルートビューコントローラー)に特定のビューコントローラーを表示するようにしたいと思います。これを実現する最良の方法は何ですか?アプリのデリゲートでナビゲーションコントローラーへの参照を取得できますか?

編集:ここに私が今使用しようとしているコードがあります。正しいナビゲーションコントローラを使用しているように見えますが、ビューコントローラはまったく表示されず、空白の画面が表示されます。

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        EventDetailViewController *destCon = [storyboard instantiateViewControllerWithIdentifier:@"EventDetailViewController"];
        destCon.event=notifyEvent;
        UINavigationController *navController =(UINavigationController *) self.window.rootViewController;
        [navController pushViewController:destCon animated:YES];

これが私が見ているものです:

enter image description here

15
James Harpe

ナビゲーションコントローラーがウィンドウのルートビューコントローラーである場合は、

(UINavigationController *)self.window.rootViewController

アプリデリゲートから、ストーリーボードで作成したものにアクセスします。

49
rdelmar

私はそれが私のために働く以下のようなものを使用します、あなたの使用法に合わせて変更してみてください

Stoaryboardはストーリーボードの名前です。通知を受け取ったら、ルートビューを呼び出すことができますLoginViewController

以下の例では、インターフェースビルダーのビューコントローラーがyourControllerNameに設定されていることを確認してくださいLoginView

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

        //replace and Push rootview manually
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
        LoginViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
        UINavigationController *navigationController=[[UINavigationController alloc] initWithRootViewController:ivc];
        self.window.rootViewController =nil;
        self.window.rootViewController = navigationController;
        [self.window makeKeyAndVisible];
}
10
u.gen