ナビゲーションコントローラーで起動するアプリケーションがあります。このナビゲーションコントローラーは、モーダルビューコントローラーを開くことができます。
- (void)openModalController:(id)sender
{
[self performSegueWithIdentifier:@"SegueIdentifier"];
}
しかし、ユーザーがURLスキームを使用してアプリケーションを開いたとき、モーダルコントローラーを開いた状態でアプリケーションを表示したいと思います。だから私はいくつかのメソッドを追加して試してみました:
// Controller
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated]; // animated == NO in initial loading
if (_shouldOpenModalController) {
[self openModalController:nil];
}
}
- (void)setShouldOpenModalController:(BOOL)flag
{
_shouldOpenModalController = flag;
}
// AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (launchOptions) {
UINavigationController *nc = (UINavigationController *)self.window.rootViewController;
MyViewController *c = (MyViewController *)[ns topViewController];
[c setShouldOpenModalController];
}
}
しかし、ここに問題があります:openModalController:
ストーリーボードで設定した遷移アニメーションでセグエを実行します。アニメーションなしでそれを行うにはどうすればよいですか?このタスクには別のアプローチがありますか?
Storyboardでセグエを複製し、2番目のセグエに別のIDを割り当てます。
その後、新しいバージョンで移行を変更できます。
私はこのスニペットを使用してviewDidLoad
の認証をリクエストしています:
[UIView setAnimationsEnabled:NO];
self.view.hidden = YES;
[self performSegueWithIdentifier:@"segue_auth" sender:self];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[UIView setAnimationsEnabled:YES];
self.view.hidden = NO;
});
承認されると、バックトランジションが思い通りにアニメーション化されます。
もう1つの方法
YourViewController *aYourViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"aYourViewControllerIdentifier"];
[self.navigationController pushViewController:aYourViewController animated:NO];
ストーリーボードのビューコントローラに@"aYourViewControllerIdentifier"
を追加します。