每次app都添加子视图的替代方法addChildViewController

时间:2014-11-07 10:18:59

标签: ios objective-c xcode

我们有一个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之间切换?

1 个答案:

答案 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];