2016-03-30 106 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]; 
相关问题