2

3 つの viewControllers を持つナビゲーション コントローラーでストーリーボードを使用しています。ルート コントローラーと他の 2 つにはそれぞれ 1 2 と 3 というラベルが付けられています。画像に示すようにここに画像の説明を入力

今問題は、単一の unWind Segue を使用して、3 番目のものから rootViewController と 2 番目の viewController に戻りたいということです。つまり、アンワインドよりもルートから 3 番目のコントローラーをプッシュするとルート コントローラーに戻り、2 番目からプッシュすると 2 番目の viewController に戻ることができます。戻るのに1つのボタンだけを使いたいです。どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

1

IBAction を指定し、そのアクションを押すボタンにアタッチして、前のビュー コントローラーのいずれかに戻る必要があります。このアクション メソッド内で、アンワインド先のコントローラーを指定できます。

ここで、画像に従って、3 番目のコントローラーから 2 番目のコントローラーに巻き戻したいとします。したがって、3 番目のコントローラーで、次のアクション メソッドをボタンにアタッチします。また、ストーリーボードに移動し、各ビュー コントローラーにストーリーボード識別子を与えます。Second View Controller のストーリーボード識別子が「secondViewController」であると仮定しましょう。

-(IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
    {

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    SecondViewController *secondVC = [storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
    int index = [self getMyDesiredViewControllerIndex:secondVC];
    [self.navigationController popToViewController:[[self.navigationController viewControllers]objectAtIndex:index] animated:YES];
    }

あなたのgetMyDesiredViewControllerIndex 方法は次のようになります-

-(int)getMyDesiredViewControllerIndex:(UIViewController*)desiredVC{

    int i=0;
    for(UIViewController *vc in [self.navigationController viewControllers]){
        if([vc isKindOfClass:[desiredVC class]]){
            return i;
        }
        i++;
    }
    return 0;
}

このようにして、必要なView Controllerにジャンプできます。目的のビュー コントローラーを指定し、getMyDesiredViewControllerIndex からインデックスを取得して、そのコントローラーにポップするだけです。

お役に立てれば!

于 2015-07-10T11:54:40.170 に答える