3

UINavigationController を使用して、次のビュー階層を持つ小さなアプリを作成しています。

ログイン -> オプション -> 3 つの異なるビュー

問題は、次の方法で最後の 3 つのビュー間を移動したいということです。

1<->2
1<->3
2<->3

つまり、他のビューから任意のビューに切り替えることができます。これは、UITabViewController 機能を思い起こさせます。したがって、これは階層的ではなく、any-to-any グラフです。ビューを切り替えるには、ナビゲーション バーのボタンを使用します。

私にとって最も簡単な方法は、UINavigationController をサブクラス化し、ビューに対応するプロパティを追加し、これらのビューを切り替えるためのメソッドを実装することです (pushViewController と popToRootViewController を使用)。これらのメソッドは、切り替え (ナビゲート) のためにビューから呼び出されます。

ただし、参照には、 UINavigationController はサブクラス化を目的としていないと書かれています。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

あなたは私に何をすすめますか?

4

2 に答える 2

0

をそのままにしますUINavigationControllerが、通常の を使用する代わりに、次のpushViewController:ようにビューを切り替えます。

NSMutableArray *viewControllers = [self.navigationController.viewControllers mutableCopy];
    // from here you can modify the order of controllers as much as you want
[viewControllers addObject:nextViewController];
[viewControllers removeObject:self];

[self.navigationController setViewControllers:viewControllers animated:YES];

アニメーションがどうなるかを望まない場合は、設定してブロックでanimated:NO囲むか、独自のカスタムをナビゲーション コントローラーのレイヤーに追加することができます。setViewControllers:[UIView animate...]CAAnimation

于 2012-10-17T08:46:38.763 に答える
0

以下のコードを使用して、View Controller を Navigation Controller に追加します。

1 番目から 2 番目への移動

SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    NSMutableArray *navigationarray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
    [navigationarray removeAllObjects];
    [navigationarray addObject:secondView];
    self.navigationController.viewControllers = navigationarray;

1 番目から 3 番目への移動

ThirdViewController *thirdView = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
    NSMutableArray *navigationarray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
    [navigationarray removeAllObjects];
    [navigationarray addObject:thirdView];
    self.navigationController.viewControllers = navigationarray;

上記のコードは、Navigation Array からすべての viewController を削除し、新しい View Controller を配置します。

特定のView Controllerに移動したい場合は、以下のコードを使用してください...

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] アニメーション:YES]

インデックスをスタック内の ur View Controller に変更します。

于 2012-10-17T10:20:26.277 に答える