我正在使用包含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之间导航?
答案 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之前无法使用