0

わかりましたので、次の質問に対する答えを探していました: AppDelegate からプッシュ通知が届いたときに、特定のビュー コントローラーをビューにプッシュする方法は?

ほとんどの答えは、rootViewController が UINavigationController の場合、StoryBoard を介してビューをインスタンス化し、そのルート ナビゲーション コントローラーでプッシュする必要があるというものです。

これが私の状況です。ストーリーボードの構成は次のとおりです。

ここに画像の説明を入力

ご覧のとおり、私の rootViewController には UINavigationController がありません。では、ストーリーボードから特定のビューを押し出すにはどうすればよいでしょうか?

注: プッシュ通知用に別のモーダル ビューを表示することは、あまり良い考えではありません。それは私の最後の手段です。

Apple のメール アプリやメッセージ アプリのようなソリューションが欲しいです。

4

1 に答える 1

0

わかりました、私はそれを簡単にあきらめることはないと思います:)これが私の問題に対して見つけた解決策です。モーダル ビュー コントローラー内からメイン アプリ ビューを表示しているため、次のようにしました。

iOS 5 以降、すべてのビュー コントローラーにはpresentedViewControllerプロパティがあります。それさえわかれば、あとは簡単です。AppDelegate.m 内の特定のコードを次に示します。

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {  
   if ([[userInfo objectForKey:@"notificationType"] isEqualToString: @"messageType"])   {

   UITabBarController * tabBarController = (UITabBarController *)[self.window.rootViewController presentedViewController];
[tabBarController setSelectedIndex:kChatViewIndex]; 
// My view controller that I presented modally is a tabBar, your case can be different. 

// ... so from here I can reach any navigation controller or any other view from inside my app

}

ビュー コントローラーを取得したので、それが tabBarController の場合は setSelectedIndex: を使用でき、ナビゲーション ユニットの場合は特定のビュー コントローラーをプッシュできます。

これが同様の問題を抱えている人に役立つことを願っています。乾杯!

于 2013-04-23T10:41:13.967 に答える