2016-03-30 104 views
2

我們有一個自定義視圖,它看起來像一個標籤欄,但最終是UIView的一個子類。保留視圖控制器之間的自定義標籤欄視圖狀態

視圖顯示爲一個標籤欄,位於UIViewController的底部。當視圖控制器中的圖像被觸摸時,我們轉換到另一個視圖控制器。

第二個視圖控制器在底部顯示了相同的假tabbar視圖。用戶可以關閉第二個視圖控制器,它將轉換回第一個。

爲兩個視圖控制器保持相同視圖及其狀態的最佳方法是什麼?例如,虛假標籤欄的一部分可能是一個可用的按鈕,其徽章圖標顯示(2)。如果這被觸及,它會下降到(1)。這需要反映在視圖的兩個實例上。

正確的方法是正常使用prepareForSegue並不斷更新視圖狀態或傳遞視圖實例嗎?還是有更好的方法?

回答

2

我認爲最好的方法是實現類似於本機標籤欄的東西。您可以通過執行container view來實現此目的。你如何做到這一點很長,但在互聯網上有很多資源。基本上你會有相同的假酒吧,你的視圖控制器將顯示在容器視圖中,應該放在標籤欄上方。具有容器視圖和選項卡欄的視圖控制器應該管理轉換並更新欄。

+1

有趣的是,這是我能想到的唯一方法,使用容器視圖。將看看是否有任何其他建議來處理這個問題 – StuartM

1

是的,正如果凍說,我會去父/子視圖控制器路線,與'標籤欄'管理添加/刪除視圖控制器和相關視圖響應觸摸事件。

1

我正在同一場景中工作。在UIViewController中,在底部和上面帶上一個空白UIView的tabBar視圖。現在的TabBar點擊按鈕,添加和刪除使用自動版式等作爲新的視圖控制器的看法 -

#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]; 
相關問題