web-dev-qa-db-ja.com

遷移アニメーションなしでセグエを実行する方法

ナビゲーションコントローラーで起動するアプリケーションがあります。このナビゲーションコントローラーは、モーダルビューコントローラーを開くことができます。

- (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:ストーリーボードで設定した遷移アニメーションでセグエを実行します。アニメーションなしでそれを行うにはどうすればよいですか?このタスクには別のアプローチがありますか?

29
voromax

Storyboardでセグエを複製し、2番目のセグエに別のIDを割り当てます。

その後、新しいバージョンで移行を変更できます。

42
Gordon Dove
 self.performSegueWithIdentifier("loginSegue",sender: nil)

enter image description here

29
keithics

私はこのスニペットを使用して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;
});

承認されると、バックトランジションが思い通りにアニメーション化されます。

8
k06a

もう1つの方法

YourViewController *aYourViewController = [self.storyboard   instantiateViewControllerWithIdentifier:@"aYourViewControllerIdentifier"];
[self.navigationController pushViewController:aYourViewController animated:NO];

ストーリーボードのビューコントローラに@"aYourViewControllerIdentifier"を追加します。

6
Shahid Aslam