我们有一个自定义视图,它看起来像一个tabbar但最终是UIView
的子类。
视图显示为UIViewController
底部的标签栏。在视图控制器中触摸图像时,我们转换到另一个视图控制器。
第二个视图控制器底部显示相同的假标签栏视图。用户可以关闭第二个视图控制器,它将转换回第一个视图。
为两个视图控制器保持相同视图及其状态的最佳方法是什么?例如,伪标签栏的一部分可能是可用按钮,其徽章图标显示(2)。如果触及它,将归结为(1)。这需要反映在视图的两个实例上。
正确的方法是正常使用prepareForSegue
并继续更新视图状态或传递视图实例吗?或者有更好的方法吗?
答案 0 :(得分:2)
我认为最好的方法是使用本机标签栏实现类似的功能。您可以通过实施container view来实现这一目标。你如何做到这一点是一个很长的故事发布在这里,但互联网上有很多资源。基本上你会有相同的假条,你的视图控制器将显示在容器视图中,应该放在标签栏的正上方。包含容器视图和选项卡栏的视图控制器应管理转换并更新栏。
答案 1 :(得分:1)
是的,正如Jelly所说,我已经使用'标签栏'管理添加/删除视图控制器和相关视图以响应触摸事件。
答案 2 :(得分:1)
我在同一场景上工作。在UIViewController中,在底部和上方的tabBar视图中取一个空白的UIView。现在单击tabBar按钮,使用AutoLayout添加和删除新的ViewController视图,如 -
#pragma mark - TAB BAR METHODS
-(void)setSelecedView:(VIEWSELECTION)selecedView
{
[self RemoveChildViewControllers ];
switch (selecedView)
{
case VIEWSELECTION_HOME:
{
HomeViewController *homeVC = [[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil];
self.titleString=@"Wellborn Company App";
[self displayContentController:homeVC OnView:self.DumpingView];
}
break;
case VIEWSELECTION_SEARCH:
{
SearchViewController *searchVC = [[SearchViewController alloc]initWithNibName:@"SearchViewController" bundle:nil];
self.titleString=@"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];
}
答案 3 :(得分:1)
如果它只是一个视图而您只是在导航堆栈上推送视图控制器,那么将您的视图添加到导航视图控制器视图。
[self.navigationController.view addSubview:view];