

iPhoneアプリケーションがバックグラウンドの際にUILocalNotificationを利用して通知を送信し、その通知からアプリを起動した際に、特定のビューを表示したいと考えております。

現在、通知の開くを押すと、普通にアプリが起動し、アプリの最初の画面(ViewControler)を表示すると事までは完成しています。通知から起動した際に特定のビュー(SecondViewControler)などを表示するにはどのようにすればよいのでしょうか？

[code]

    - (void)setLocalNotification:(NSString *)message
    {
        UILocalNotification *notification = [[UILocalNotification alloc] init];
        notification.fireDate = [[NSDate date] dateByAddingTimeInterval:0];
        notification.timeZone = [NSTimeZone defaultTimeZone];
        notification.alertBody = message;
        notification.alertAction = @"開く";
        notification.soundName = UILocalNotificationDefaultSoundName;
        notification.applicationIconBadgeNumber = 1;
    
        // 通知を登録
        [[UIApplication sharedApplication] scheduleLocalNotification:notification];
    }
    
[/code]


CC BY-SA 3.0
2015-01-01T11:32:35.733
2903
2015-07-30T20:07:03.140
2015-01-01T15:23:54.903
30
5032
question
ios objective-c
UILocalNotificationの通知から起動した際の動作設定


SecondViewControllerをモーダルで表示する場合のサンプルです。  
`AppDelegate`に記述してください。

[code]

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
      if (userInfo != nil) {
        [self showSecondViewController];
      }
      return YES;
    }
    
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
    {
      if (application.applicationState == UIApplicationStateInactive) {
        [self showSecondViewController];
      }
    }
    
    - (void)showSecondViewController
    {
      UIViewController *controller = [[SecondViewController alloc] init];
      [self.window.rootViewController presentViewController:controller animated:YES completion:nil];
    }
    
[/code]

StoryboardでデザインしたSecondViewControllerを表示するには以下のようにします。
`storyboardWithName:@"Main"`の部分は、該当するStoryboardのファイル名に依存するので適宜変えてください。(`Main.storyboard`の場合は`@"Main"`)

注意点として、Storyboard上でSecondViewControllerの`Storyboard
ID`に`SecondViewController`をセットする必要があります。

[code]

    - (void)showSecondViewController
    {
      UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
      UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
      [self.window.rootViewController presentViewController:controller animated:YES completion:nil];
    }
    
[/code]


CC BY-SA 3.0
2015-01-01T12:55:48.620
2908
2015-01-01T14:36:59.460
2015-01-01T14:36:59.460
3639
3639
2903
answer