中继外观方法正确调用自定义容器视图控制器

时间:2013-05-20 14:19:18

标签: ios ios5 uiviewcontroller

我正在关注Apple's guide来构建我自己的自定义容器视图控制器。除了一个恼人的问题外,它似乎开箱即用。

我究竟如何指定我的子视图控制器何时会收到viewWillAppear:viewDidAppear:来电(以及他们的disappear对方)?

让我说我有一个儿童滑入父母或类似的动画。很自然地,我希望在动画开始时调用viewWillAppear:YES,在结尾调用viewDidAppear:YES。但是,默认情况下,当我的孩子的视图被添加到父视图中时,viewWillAppear:NOviewDidAppear:NO会同时被调用。

现在,我知道在iOS 6中添加了beginAppearanceTransition:animated:endAppearanceTransition方法,但我想支持iOS 5.看起来它们似乎也适用于高级案例:

  

将容器添加到容器后,容器会自动添加   将轮换和外观回调转发到子视图   一旦发生需要消息的事件,控制器就会出现   转发。这通常是您想要的行为,因为它可以确保   所有事件都已正确发送。但是,有时默认   行为可能会按照无意义的顺序发送这些事件   你的容器。例如,如果同时有多个孩子   更改其视图状态,您可能希望合并更改   外观回调都是在同一时间发生的   逻辑顺序。为此,您需要修改要采用的容器类   对外观或轮换回调负责。

还有transitionFromViewController:toViewController:duration:options:animations:completion:方法在适当的时候调用外观方法,但它需要两个视图控制器在运行,并且通常在这里看起来不合适。当然,我可以做这个伎俩并喂它一个虚拟的孩子,但是认真地......

有什么我想念的吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

答案有点有趣。

文档可能会说在iOS 6+中可以使用beginAppearanceTransition:animated:endAppearanceTransition,但事实并非如此。这些方法也可以在iOS 5中使用:

- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);
- (void)endAppearanceTransition __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);

This question's answer也说明了同样的事情。案件解决了!