2013-01-09 151 views
1

我现在用的是遏制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之间进行导航的方法吗?

+1

我知道现在你已经掌握了自定义的容器视图控制器,但只为在这个老问题上的清晰度,不要忘了为每个'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

+1

致电'didMoveToParentViewController'和'willMoveToParentViewController'是你执行'addChildViewController'和'removeFromParentViewController'时的函数,当你执行'transitionFromViewController'时不__。 – Rob

+0

再次感谢您的帮助......你在本周末多次帮助我......所以根据你所说的我在'完成'块中遗漏'willMove ...:nil'? – jacobronniegeorge

回答

1

因此,您不需要手动从视图层次结构中删除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

+0

我应该写的更好(我会编辑)我不一定关心删除...我的问题更多围绕是否有必要删除它,我可以保存在内存中,这样我就可以转换而无需加载并超过 – jacobronniegeorge

+0

正如我所说,这个方法将自动处理在动画完成时从超级视图中移除第一个视图。查看我的编辑了解更多细节。 – jmstone617

相关问题