自定义容器视图控制器

时间:2013-01-09 19:34:07

标签: iphone objective-c xcode ios6

我正在使用包含API来创建自定义容器视图控制器

在Parent的ViewDidLoad中创建父视图控制器,以及设置子视图控制器:

[self addChildViewController:newA];
[self addChildViewController:newB];
[self addChildViewController:newC];

现在,一旦添加了这些childVC,我就可以转换:

[self transitionFromViewController:from
                  toViewController:to
                          duration:1.0
                           options:UIViewAnimationOptionTransitionFlipFromLeft
                        animations:nil
                        completion:^(BOOL b){
                            [to didMoveToParentViewController:self];
                            [from.view removeFromSuperview];
                            [from removeFromParentViewController];
                        }];

我现在的问题是,我必须删除来自parentVC的当前childVC以显示新的VC吗?

                        completion:^(BOOL b){
                            [to didMoveToParentViewController:self];
                            [from.view removeFromSuperview];
                            [from removeFromParentViewController];
                        }

有没有办法可以保存这些childVCs,只需按一下滑动/按钮操作即可在这些childVCs之间导航?

1 个答案:

答案 0 :(得分:1)

因此,您无需手动从视图层次结构中删除from视图控制器的视图。完成动画块后,此方法将为您处理。从这个方法的文档:

  

此方法将第二个视图控制器的视图添加到视图中   层次结构,然后执行动画中定义的动画   块。动画完成后,它会删除第一个视图   视图层次结构中的控制器视图。

但是,作为一个警告,动画块不能像你的代码示例中那样NULL(就是说,你有nil,而不是NULL,这不是没有意义,因为animations参数是一个块,而不是一个Objective-C对象。

更新:根据您的实施情况,如果清除了该视图的内存,则可能会重复调用viewDidLoad。例如,UITabBarController通常只在将VC添加到选项卡栏时调用viewDidLoad,然后才调用viewWill / DidAppear。同样,当您弹出到视图控制器时,UINavigationController将不会调用viewDidLoad,因为它一直在其导航堆栈中维护它,但如果您弹出一个VC,它将调用viewDidLoad然后将其推回(通常)。如果您没有获得所需的行为,则可以在容器实现中继承此方法。

** 注意我正在从你的问题中删除iphone-sdk-4.0标签,因为收容API在5.0之前无法使用