どこからでも (アプリ デリゲートを含む) ビュー コントローラーを表示するために、このコードを使用して iOS 8 以降で成功しました (以前の互換性についてはわかりません)。モーダル ビューがある場合は、モーダル ビューから表示されます。
YOURAppDelegate *appDelegate = (YOURAppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *rootNavC = (UINavigationController *)appDelegate.window.rootViewController;
UIViewController *topVC = rootNavC.topViewController;
UIViewController *myNewVC = [rootNavC.storyboard instantiateViewControllerWithIdentifier:<YOUR STORYBOARD ID>];
if (topVC.presentedViewController)
{
if ([topVC.presentedViewController class] == [UINavigationController class])
{
dispatch_async(dispatch_get_main_queue(), ^{
[((UINavigationController*)topVC.presentedViewController) pushViewController:myNewVC
animated:YES];
});
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
[topVC.presentedViewController.navigationController pushViewController:myNewVC
animated:animated];
});
}
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
[rootNavC pushViewController:myNewVC
animated:animated];
});
}
通常、これを便利なメソッドでラップし、インスタンス化されたビュー コントローラーを渡します。OP に - ストーリーボードで SignInViewController を作成し、一意のストーリーボード ID を割り当ててから、上記のコードでその ID を置き換えます。