自定义容器视图控制器
我现在用的是遏制API创建自定义的容器视图控制器在家长的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];
}];
我现在的问题是,我必须删除日e从父VC当前的childVC显示新的VC?
completion:^(BOOL b){
[to didMoveToParentViewController:self];
[from.view removeFromSuperview];
[from removeFromParentViewController];
}
有没有我可以保留这些childVCs'和根本就刷卡/按钮行动,那么这些childVCs之间进行导航的方法吗?
因此,您不需要手动从视图层次结构中删除from
视图控制器的视图。该方法在完成动画块后为您处理。从这个方法的文档:
此方法添加第二视图控制器的视图到视图 层次结构,然后执行在你的动画 块中定义的动画。动画完成后,它会从视图层次结构中删除控制器的第一个视图。
一个简单的警告这一点,虽然,动画块不能NULL
,因为它是在你的代码示例(他这样说,你有nil
,不NULL
,这没有任何意义,因为animations
参数一个块,而不是一个Objective-C对象)。
UPDATE:根据您的实现,viewDidLoad
可能会反复,如果该视图的内存被清理调用。举例来说,一个UITabBarController
通常只要在将VC添加到标签栏时调用viewDidLoad,然后在此之后调用viewWill/DidAppear。同样,UINavigationController
在弹出视图控制器时不会调用viewDidLoad
,因为它一直将其保留在其导航堆栈中,但如果弹出VC并将其重新打开(通常),将调用viewDidLoad
。如果你没有得到你想要的行为,你可以在你的容器实现中继承这个方法。
** 注意我除去你的问题iphone-SDK-4.0标签,作为遏制API没有成为可用,直到5.0
我应该写的更好(我会编辑)我不一定关心删除...我的问题更多围绕是否有必要删除它,我可以保存在内存中,这样我就可以转换而无需加载并超过 – jacobronniegeorge
正如我所说,这个方法将自动处理在动画完成时从超级视图中移除第一个视图。查看我的编辑了解更多细节。 – jmstone617
我知道现在你已经掌握了自定义的容器视图控制器,但只为在这个老问题上的清晰度,不要忘了为每个'addChildViewController'调用'[newA didMoveToParentViewController:self]''。当你添加时,在完成时调用'didMove ...'(不只是在转换时)。当你移除时,在你做之前调用'willMove ...:nil'。请参阅[添加和删除子项](http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html#//apple_ref/doc/uid/TP40007457-CH18-SW13) – Rob
致电'didMoveToParentViewController'和'willMoveToParentViewController'是你执行'addChildViewController'和'removeFromParentViewController'时的函数,当你执行'transitionFromViewController'时不__。 – Rob
再次感谢您的帮助......你在本周末多次帮助我......所以根据你所说的我在'完成'块中遗漏'willMove ...:nil'? – jacobronniegeorge