0

初めて、実際に機能するコードでここに質問を投稿しています! ただし、コードの行数を減らす方法があると思います。教祖が道を示してくれることを願っています。

参照用のストーリーボード ウィンドウは次のとおりです。

ここに画像の説明を入力

私は、containerView を持つ Main ViewController を持っています。ContainerView には独自の Navigation Controller があります。メイン ビュー コントローラーの左側にある各ボタン (B1 ~ B5) は、それぞれのシーン番号にセグエします。つまり、B2 はシーン 2 をスタックにプッシュします。B4 はシーン 4 をスタックにプッシュします。visibleViewContoller がシーン 5 で、ユーザーが B1 を押すと、シーン 1 に到達するまですべての viewController がポップされます。

繰り返しますが、以下のコードは問題なく動作します。B1 と B2 のコードのサイズを縮小したいだけです。

- (IBAction)B1Pressed:(id)sender {

UINavigationController *navController = [self.childViewControllers objectAtIndex:0];
NSMutableArray *VCs = [navController.viewControllers mutableCopy];
UIViewController *visibleViewController = [navController visibleViewController];

if (visibleViewController == [VCs objectAtIndex:0])
{
    return;
}
else if (visibleViewController ==[VCs objectAtIndex:1])
{
     [navController popViewControllerAnimated:YES];
}

else if (visibleViewController ==[VCs objectAtIndex:2])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];
}

else if (visibleViewController ==[VCs objectAtIndex:3])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

}
else if (visibleViewController ==[VCs objectAtIndex:4])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

}
else if (visibleViewController ==[VCs objectAtIndex:5])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

    }
}

- (IBAction)B2Pressed:(id)sender {

UINavigationController *navController = [self.childViewControllers objectAtIndex:0];
NSMutableArray *VCs = [navController.viewControllers mutableCopy];
UIViewController *visibleViewController = [navController visibleViewController];

if (visibleViewController == [VCs objectAtIndex:0])
{
    STLMEatDrinkViewController *stlmEDVC = [self.storyboard instantiateViewControllerWithIdentifier:@"B2"];
    [navController pushViewController:stlmEDVC animated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:1])
{
    return;
}

else if (visibleViewController ==[VCs objectAtIndex:2])
{
    [navController popViewControllerAnimated:YES];
}

else if (visibleViewController ==[VCs objectAtIndex:3])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

}
else if (visibleViewController ==[VCs objectAtIndex:4])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

}
else if (visibleViewController ==[VCs objectAtIndex:5])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];   
 }
}

ここで、B3Pressed、B4Pressed、および B5Pressed に対して、この同じコードをあと 3 回書くことを想像してください。コードが多すぎると思いますが、これにはもっと良いアプローチがあるとほぼ確信しています。

ありがとうございました。

4

2 に答える 2

2

1.) を使用してオブジェクトを比較してはなりません==。を使用しisEqual:ます。

2.) ループ。

int idx = [VCs indexOfObject:visibleViewController];

if (idx == 0) {
    STLMEatDrinkViewController *stlmEDVC = [self.storyboard instantiateViewControllerWithIdentifier:@"B2"];
    [navController pushViewController:stlmEDVC animated:YES];
} else if (idx == 1) {
    return;
} else {
    int i;
    for (i = 2; i < idx; i++) {
        [navController popViewControllerAnimated:NO];
    }

    [navController popViewControllerAnimated:YES];
}
于 2013-02-09T22:01:37.750 に答える
2

これはあなたの問題に答えると思います:

- (IBAction)B1Pressed:(id)sender
{
    UINavigationController *navController = [self.childViewControllers objectAtIndex:0];
    UIViewController *B1ViewController = [navController.viewControllers objectAtIndex:0];
    [navController popToViewController:B1ViewController animated:YES];
}
于 2013-02-09T22:07:26.800 に答える