0

タブバーコントローラーであるプロジェクトがあります。通常、各タブにはUINavigationControllerがあります。私が抱えている問題はこれです:たくさんのナビゲーションを備えた新しいタブが必要です(約30のナビゲーションアイテムが4〜8のグループにグループ化されています。問題:ナビゲーションバーがすでにいっぱいです(ナビゲーションコントローラー(またはバー)を使用できません)。必要なのは、ナビゲーションバー(グローバル検索バーとその他のグローバルアイコンが表示されている)の下のナビゲーションです。これを最適に実装するにはどうすればよいですか?

私が今持っているもの:ナビゲーションバーのすぐ下にUIScrollViewを作成して、「手で巻いた」ナビゲーションバーとして機能させました。ナビゲーションアイテムの「グループ化」がいくつあるか(現在は4つだけ)わからないため、これはscrollViewです。これらの各グループはUIButtonで表され、そのうちのいくつかはすぐにビューを表示し、他のグループはポップオーバーにさらにナビゲーションアイテムを表示し、選択するとビューを表示します。

問題:上記のナビゲーションビューの下に、ユーザーのナビゲーションの選択に基づいてコンテンツを表示できる「コンテンツビュー」が必要です。iOS 5.0をサポートする必要があるため、ストーリーボードコンテナビューを使用できません(残念ながら)。提示するコンテンツビューには3つのタイプ(おそらくもっと後で)があります。これらを個別のビューコントローラーとして作成し、前述のナビゲーションで選択した適切なビューをプッシュします。使用できるサードパーティのナビゲーションコントローラーはありますか?「自分で転がす」必要がありますか?アドバイスをいただければ幸いです。

これが私が達成する必要があることの「まとめられた」絵です: ここに画像の説明を入力してください

4

1 に答える 1

0

コンテンツビューと呼んでいるものをメインビューのサブビューにし、childViewControllerのビューを追加するビューとして使用します。カスタムコンテナコントローラーをまだ読んでいない場合は、読んでおく必要がありますが、基本的な使用方法は次のとおりです。

質問でビューを表示するコントローラーは、カスタムコンテナーコントローラーになります。viewDidLoadメソッドで初期コントローラーをロードし、ユーザーがスクロールバーから何かを選択したことに応じて、サブビュー(私はself.containerViewと呼んでいます)でコントローラーを切り替えることができます。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    UIViewController *initial = [self.storyboard instantiateViewControllerWithIdentifier:@"InitialVC"];
    [self addChildViewController:initial];
    [initial.view.frame = self.containerView.bounds];
    [self.containerView addSubview:initial.view];
    self.currentController = initial;
}

-(void)switchToNewViewController:(UIViewController *) cont {
    [self addChildViewController:cont];
    cont.view.frame = self.containerView.bounds;
    [self moveToNewController:cont ];
}

-(void)moveToNewController:(UIViewController *) newController {
    [self.currentController willMoveToParentViewController:nil];
    [self transitionFromViewController:self.currentController toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
         completion:^(BOOL finished) {
             [self.currentController removeFromParentViewController];
             [newController didMoveToParentViewController:self];
             self.currentController = newController;
         }];
}

これはあなたに基本的な考えを与えるはずです。私はこれを私のテストプロジェクトの1つから取ったので、おそらく少し調整する必要があります。

于 2013-01-22T04:59:11.547 に答える