1

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

Parent的ViewDidLoad中创建Parent View Controller,设置子View Controller:

[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];
                        }

有没有一种方法可以保留这些 childVC 并简单地进行滑动/按钮操作以在这些 childVC 之间导航?

4

1 回答 1

1

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

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

但是,需要注意的是,动画块不能NULL像您的代码示例中那样(也就是说,您有nil, not NULL,这是没有意义的,因为animations参数是块,而不是 Objective-C 对象) .

更新:根据您的实现,viewDidLoad如果该视图的内存被清理,可能会被重复调用。例如, AUITabBarController通常只在将您的 VC 添加到选项卡栏时调用 viewDidLoad,然后只调用 viewWill/DidAppear。同样,当您弹出视图控制器时 aUINavigationController不会调用viewDidLoad,因为它一直在其导航堆栈中维护它,但viewDidLoad如果您从 VC 弹出然后将其推回(通常),它将调用。如果你没有得到你想要的行为,你可以在你的容器实现中子类化这个方法。

**注意我正在从您的问题中删除 iphone-sdk-4.0 标签,因为包含 API 直到 5.0 才可用

于 2013-01-09T19:40:17.160 回答