我的UIScrollView子类中有一个UIViewController的视图。问题是我的UIViewController没有在旋转设备时调用willRotate委托。这可能是因为UIView没有在其中实现旋转委托。解决这个问题的最佳方法是什么?
基本上结构是我有一个MainViewController,它有一个UIScrollView。在这个UIScrollView里面我有一个子视图,它是一堆UIViewControllers的视图。现在的问题是,当我旋转时它没有得到旋转调用。解决这个问题的一种方法是从MainViewController委托给那些相应的UIViewController。有没有更好/更优雅的方法来解决这个问题?
我将它作为我的UIScrollView的子视图添加而不是我的MainViewController,你不能从UIView中进行UIViewControllers包含。如果我错了,请纠正我
答案 0 :(得分:1)
我认为你反对MVC pattern。你不能在视图中有一个控制器;相反,你应该有一个控制器来调解视图和用户输入之间的通信。在您的情况下,您可以将滚动视图设置为self.view
的{{1}},然后将viewcontrollers视图添加为子视图。
答案 1 :(得分: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