我们有一个viewcontroller,它有两种视图模式 - 列表和地图。 之前我们使用自定义tabcontroller进行切换。但是现在,由于我们不想显示标签并做更多的事情,我们通过添加childviewcontrollers来实现。 但是很少有子视图在子视图中很常见,比如过滤器。 所以,这就是我们现在的做法:
- (void)switchView:(UIButton *)sender {
if(!self.mapVisible) {
self.mapVisible = YES;
_mapViewController.view.frame = self.view.bounds;
[self addChildViewController:_mapViewController];
[_listViewController willMoveToParentViewController:nil];
[self transitionFromViewController:_listViewController
toViewController:_mapViewController
duration:0.7
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:nil
completion:^(BOOL done){
[_mapViewController didMoveToParentViewController:self];
[_listViewController removeFromParentViewController];
[self setupFooterAfterFlip];
}];
} else {
self.mapVisible = NO;
_listViewController.view.frame = self.view.bounds;
[self addChildViewController:_listViewController];
[_mapViewController willMoveToParentViewController:nil];
[self transitionFromViewController:_mapViewController
toViewController:_listViewController
duration:0.7
options:UIViewAnimationOptionTransitionFlipFromRight
animations:nil
completion:^(BOOL done){
[_listViewController didMoveToParentViewController:self];
[_mapViewController removeFromParentViewController];
[self setupFooterAfterFlip];
}];
}
}
每次在视图之间切换时,我们都会调用switchview方法。正如您所看到的,我们每次都是从头开始设置页脚。他们是一个更有效的方式,以便self.view保持页脚,只在列表视图和mapview之间切换?
答案 0 :(得分:0)
我想出了一个可能的解决方案。我没有每次都调用方法setupFooterAfterFlip,而是从头开始创建过滤器,而是给过滤器一个标签ID。现在,每次用户切换视图时,我都会从superview中删除过滤器并将其重新添加到新视图中。
// remove footer
UIView *footer = (UIView *)[self.view viewWithTag:22];
[footer removeFromSuperview];
//change view, write some code, add footer again
[self.view addSubview:footer];