どこからでも(アプリケーションデリゲートを含む)ビューコントローラを表示するために、私はこのコードを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];
});
}
私は通常このメソッドを簡易メソッドでラップし、インスタンス化されたView Controllerを渡します。 OPにするには、ストーリーボードにSignInViewControllerを作成し、一意のストーリーボードIDを割り当てて、上記のコードでそのIDを置き換えます。
「currentVC」とは何ですか? – Andreas
"currentVC"の代わりに "self"というキーワードを使用して、現在作業中のビューコントローラを参照することを意味します。 –
しかし、彼はappDelegateからプレゼンテーションについて質問しました。 "前に"どんなviewcontrollerに入れても私は賭けました。 – Zerho