

iOS9以降から実装されているQuick Action(3D touch)を開発していますが  
Appdelegate内から指定したViewController(StoryBoard)の呼び出しはできましたが  
TabBarControllerの呼び出し方法がわかりません  
rootViewControllerにStoryBoardで作成したTabBarをどのようにして追加すればよろしいのでしょうか?

[code]

    -(void)application:(UIApplication *)application
        performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem
        completionHandler:(void (^)(BOOL))completionHandler{
        if([shortcutItem.type compare:@"info.plistのTypeコード"] == NSOrderedSame) {
    
            self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
            UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    
            UIViewController *viewController;
                viewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerID名"];
            self.window.rootViewController = viewController;
            [self.window makeKeyAndVisible];
        }
    }
    
[/code]


CC BY-SA 3.0
2015-10-29T07:10:29.383
18194
2015-10-30T05:05:28.983
13025
question
ios objective-c xcode iphone
iOS9 Quick Action 画面遷移


解決しました

[code]

    UIViewController *viewController;
                viewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewControllerID名"];
            self.window.rootViewController = viewController;
    
[/code]

から↓でUITabのIndex=1に割り当てているViewの表示ができました

[code]

    UITabBarController *tabBarController = [storyboard instantiateViewControllerWithIdentifier:@"tabBarControllerID名"];
    tabBarController.selectedIndex=1;
    self.window.rootViewController = tabBarController;
    
[/code]


CC BY-SA 3.0
2015-10-29T13:40:39.967
18210
2015-10-29T13:40:39.967
13025
18194
answer


補足的な回答をします。「こういうこともできるよ」、「こうしたほうがいいんじゃないかなあ？」くらいの内容です。

`UIStoryboard`のメソッド`- (UIViewController
*)instantiateViewControllerWithIdentifier:(NSString *)identifier`の代わりに`-
(UIViewController *)instantiateInitialViewController`を使うことを検討してください。  
後者のメソッドは、Storyboard内の基底ViewControllerをインスタンス化して、返します。「基底」というのは、下図の矢印が付いているViewControllerのことで、Attributes
Inspectorで、「Is Initial View Controller」にチェックが入っています。

[code]

    UITabBarController *tabBarController = (UITabBarController *)[storyboard instantiateInitialViewController];
    tabBarController.selectedIndex=1;
    self.window.rootViewController = tabBarController;
    
[/code]

Storyboardの編集の意図に従ったインスタンス化をするというのが、このメソッドを使う意味です。

[![画像の説明をここに入力](https://i.stack.imgur.com/pgWwl.png)](https://i.stack.imgur.com/pgWwl.png)


CC BY-SA 3.0
2015-10-29T23:20:25.693
18225
2015-10-30T05:05:28.983
2015-10-30T05:05:28.983
7362
7362
18194
answer