0

私は次のとおりですthis "リリース"私の前のビューコントローラは、UINavigationControllerで答えます。Custom Segueを使用したPopView UIViewController?

これはうまく動作しますが、ポップする部分は動作しにくいコードです。基本的に私のアプリはこのように動作します。メインメニュー(View 1)から開始し、View 2にプッシュし、Custom Push Segueを使用してView 3に移動します。今度は、View 3からView 2に移動するために別のカスタムSegueをポップするために使いたいと思います。しかし、以下のコードを使用すると、ビュー1に非常に迅速にポップしてから、最終的にビュー2にプッシュされます。ビューコントローラのトランジションが不自然で、カスタムセグを使用するだけで普通のポップトランジションを達成しようとしていますソースビューコントローラを「解放する」。

これは、私が無駄に今使っている私のコードです:

- (void)perform { 
    // Grab Variables for readability 
    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 
    UIViewController *destinationController = (UIViewController*)[self destinationViewController]; 
    UINavigationController *navigationController = sourceViewController.navigationController; 

    // Get a changeable copy of the stack 
    NSMutableArray *controllerStack = [NSMutableArray arrayWithArray:navigationController.viewControllers]; 
    // Replace the source controller with the destination controller, wherever the source may be 
    [controllerStack addObject:destinationController]; 

    // Assign the updated stack with animation 
    [navigationController setViewControllers:controllerStack animated:YES]; 
} 

は、私がここで間違ってやっている何かがありますか?

+0

あなたは[navigationController pushViewController:destinationController animated:YES]を試してみましたか? –

+0

@NiravDoctorwalaただし、これで問題は解決されません。もう一つの問題は、私が特に「プッシュ」ではなく「ポップ」アニメーションを探していることです。 –

+0

http://stackoverflow.com/questions/10281545/removing-viewcontrollers-from-navigation-stack –

答えて

0

View 3をポップして、View 2に戻るだけなら、このようなことはできませんか?

- (void)perform { 
    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 
    UINavigationController *navigationController = sourceViewController.navigationController; 
    [navigationController popViewControllerAnimated:YES]; 
} 
+0

これは私が必要とするものではありません。私の場合はポップアップがView 3 - > View 1になるためです。ポップアップしようとしていますビュー2 –

0

私はこの答えは私に局在しているが、私のナビゲーションスタック階層をログに記録し、アレイで遊んでた後、私はこれをしなかったし、それは私のためにうまく動作するかどうかを確認していません。

- (void)perform { 
    // Grab Variables for readability 
    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 
    UIViewController *destinationController = (UIViewController*)[self destinationViewController]; 
    UINavigationController *navigationController = sourceViewController.navigationController; 

    // Get a changeable copy of the stack 
    NSMutableArray *controllerStack = [NSMutableArray arrayWithArray:navigationController.viewControllers]; 
    [controllerStack replaceObjectAtIndex:1 withObject:destinationController]; 
    [controllerStack addObject:sourceViewController]; 

    [navigationController setViewControllers:controllerStack animated:NO]; 
    [navigationController popViewControllerAnimated:YES]; 
} 

より広範な答えはおそらく、前方に一箇所にその前に、インデックスからすべてをシフトし、配列内のソース・ビュー・コントローラオブジェクトのインデックスを検索し、その前にインデックスにあなたの目的地のビューコントローラを追加することですあなたは他のView Controllerのどれかを台無しにしません。私が言ったように、インデックス1はこの場合特に私のために働いたものです。

関連する問題