2

カスタムビューはタブバーのように見えますが、最終的にはUIViewのサブクラスです。ビューコントローラ間でカスタムタブバービューステートを保持する

ビューは、UIViewControllerの下部にあるタブバーとして表示されます。ビューコントローラに画像がタッチされると、別のビューコントローラに遷移します。

第2のビューコントローラには、下部に同じ偽のタブバービューが表示されています。ユーザは、第2のビューコントローラを閉じることができ、最初のビューコントローラに戻る。

両方のビューコントローラで同じビューとその状態を維持する最良の方法は何ですか?例えば、偽のタブバーの一部は、(2)を表示するバッジアイコン付きの使用可能なボタンである可能性があります。それが触れられれば(1)になるでしょう。これはビューの両方のインスタンスに反映する必要があります。

普通の方法でprepareForSegueを使用し、ビューの状態を更新したり、ビューのインスタンスを渡したりするのが正しい方法でしょうか?それとも良い方法がありますか?

答えて

2

私は最良の方法は、ネイティブのタブバーと同様のものを実装することだと思います。これは、container viewを実装することで実現できます。あなたはそれをどうやってここに投稿するのは長い話ですが、インターネットには多くのリソースがあります。基本的には、同じ偽のバーがあり、ビュー・コントローラーはコンテナ・ビューで表示され、タブ・バーのすぐ上に置く必要があります。コンテナビューとタブバーの両方を持つビューコントローラは、トランジションを管理し、バーを更新する必要があります。

+1

コンテナビューを使用して私が考えることができる唯一の方法は面白かったです。これを処理するための他の提案があるかどうかを確認します – StuartM

1

Jellyが親/子ビューコントローラルートに行き、タッチイベントに応答してビューコントローラと関連ビューの追加/削除を管理する「タブバー」と言いました。

1

私は同じシーンに取り組んでいます。 UIViewControllerでは、空白のUIViewを取る下部と上のtabBarビューを使用します。今TabBarのボタンのクリックで、追加としてのような自動レイアウトを使用して、新しいのViewControllerのビュー削除 - それはただ眺めていると、あなたは、単にナビゲーションスタックにView Controllerをプッシュする場合

#pragma mark - TAB BAR METHODS 

-(void)setSelecedView:(VIEWSELECTION)selecedView 
{ 
    [self RemoveChildViewControllers ]; 
    switch (selecedView) 
    { 
     case VIEWSELECTION_HOME: 
     { 
      HomeViewController *homeVC = [[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil]; 
      [email protected]"Wellborn Company App"; 
      [self displayContentController:homeVC OnView:self.DumpingView]; 
     } 
      break; 
     case VIEWSELECTION_SEARCH: 
     { 
      SearchViewController *searchVC = [[SearchViewController alloc]initWithNibName:@"SearchViewController" bundle:nil]; 
      [email protected]"Search"; 
      [self displayContentController:searchVC OnView:self.DumpingView]; 
     } 
      break; 
}} 

#pragma mark - VC Adding/Removing Methods 

- (void)RemoveChildViewControllers 
{ 
    NSArray *childVCArray = [self childViewControllers]; 

    for (__strong UIViewController *childvc in childVCArray) 
    { 
     [childvc willMoveToParentViewController:nil]; 
     [childvc.view removeFromSuperview]; 
     [childvc removeFromParentViewController]; 
    } 
} 

- (void)displayContentController:(UIViewController*) content OnView:(UIView*)parentView 
{ 
    [self addChildViewController:content]; 
    [parentView addSubview:content.view]; 

    NSDictionary *views = @{ 
          @"childView" : content.view, 

          }; 
    NSArray *arr; 

    [content.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    arr = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[childView]-0-|" options:0 metrics:nil views:views]; 
    [parentView addConstraints:arr]; 

    arr = [NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[childView]-0-|" options:0 metrics:nil views:views]; 
    [parentView addConstraints:arr];  
    [content didMoveToParentViewController:self]; 
} 
1

を、そして自分のナビゲーションにあなたのビューを追加ビューコントローラビュー。

[self.navigationController.view addSubview:view]; 
関連する問題