1

我的 UIScrollView 子类中有一个 UIViewController 的视图。问题是当我旋转设备时,我的 UIViewController 没有调用 willRotate 委托。这可能是因为 UIView 没有在其中实现旋转委托。解决这个问题的最佳方法是什么?

基本上结构是我有一个 MainViewController,其中有一个 UIScrollView。在这个 UIScrollView 里面我有一个子视图,它是一堆 UIViewControllers 的视图。现在的问题是,当我旋转时它没有收到旋转调用。处理此问题的一种方法是将 MainViewController 委托给相应的 UIViewController。有没有更好/优雅的方法来解决这个问题?

我将它添加为我的 UIScrollView 而不是我的 MainViewController 的子视图,并且您不能从 UIView 执行 UIViewControllers 包含。如果我错了,请纠正我

4

2 回答 2

1

我认为你违背了MVC 模式。视图中不能有控制器;相反,您应该有一个控制器来调解视图和用户输入之间的通信。在您的情况下,您可以将滚动视图设置为self.viewMainViewController然后将 viewcontrollers 视图添加为子视图。

于 2012-06-08T00:30:48.233 回答
0

观看我在评论中发布的视频:https ://developer.apple.com/videos/wwdc/2011/?id=102

这是视图控制器包含的简短摘要,这是您正在寻找的设计,不是将所有逻辑组合到一个视图控制器中,也不是对 SDK 中内置的东西使用委托。

视图控制器有一个视图并为该视图提供逻辑,并且很可能是其中的一些子视图。

对于该层次结构中的特定视图,您可能有一个复杂的视图层次结构和复杂的逻辑,这些逻辑保证视图有它自己的视图控制器来控制它和它的子视图。

假设您有一个 MainViewController 并且它的视图是 UIScrollView (或子类)。在该滚动视图中,您可能有各种各样的复杂视图来保证它们自己的控制器,因此您有一个类 SubViewController,它将滚动视图的子视图作为它的视图。

SubViewController 需要使旋转和外观方法回调正常工作,以实现子视图的逻辑并处理布局更改。

    [mainViewControllerInstance addChildViewController:subViewControllerInstance];

可是等等。子视图仍然不在视图层次结构中。

    [mainViewControllerInstance.view addSubView:subViewControllerInstance.view];

您已成功创建了两个视图控制器的有效视图控制器层次结构,并设置了它们视图的关联视图层次结构。

您现在将拥有适当的回调功能,因为 MainViewController 会将它们转发给 SubViewController。

编辑:

有关视图控制器包含的概览,请参阅文档:http: //developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

于 2012-06-08T19:21:13.307 回答