关于何时使用UIViewContoller与UIView,有一些很好的答案。例如here和here。
一般要点是,应该使用UIVIewController来控制全屏数据,因为
我的问题是,鉴于此,我该如何在几个顶级视图之间使用左右分页来构建应用程序?
我想要创建一个包含几个包含配方列表的UITableViews的接口。用户左右滑动可在列表之间导航。底部有一个共同的菜单,无论如何都不会改变。
我最初的想法是为UIScrollView使用一个UIVIewController,然后从那里添加子视图。
但是,我真的希望每个列表都有自己的UIViewController,以便它可以处理自己的轮换,并像自己的REST方法一样保存业务逻辑。让顶层的UIViewController处理子视图的旋转似乎很痛苦,并且把逻辑放在其他地方似乎违反了MVC。
是否可以构建一个应用程序,以使多个UIViewController驻留在一个UIScrollView中,还是适合使用一系列顶级UIViewController和UISwipeGestureRecognizer来模拟UIScrollView的分页效果?
谢谢。
最佳答案
一些想法:
UIPageViewController
(在UIViewController
实例之间来回切换)。然后,每个配方将有一个单独的UIViewController
。在iOS 5中,您只有UIPageViewControllerTransitionStylePageCurl
transition style,但是在iOS 6中,您还有UIPageViewControllerTransitionStyleScroll
。有关更多信息,请参见iOS的View Controller Catalog中的Page View Controller部分。
UIScrollView
“自己动手”,您将希望删除滚动到屏幕外的实例(通过注册为滚动视图的delegate
并响应 scrollViewDidScroll
),这样就不会不必要地消耗内存。如果确实将子视图控制器添加到滚动视图,请不要忘记调用适当的custom container calls。具体来说,在将视图控制器添加到滚动视图时,请确保调用以下命令(假设
controller
是子控制器,而self
是主视图控制器):[self addChildViewController:controller];
[self.scrollView addSubview:controller.view];
[controller didMoveToParentViewController:self];
当您响应
scrollViewDidScroll
删除不再可见的视图控制器时,请执行适当的删除调用,例如:[controller willMoveToParentViewController:nil];
[controller.view removeFromSuperview];
[self removeChildViewController:controller];
有关为什么调用这些自定义容器调用很重要的信息,请参阅WWDC 2011视频Implementing UIViewController Containment。
UINavigationController
,因为它会将所有先前的页面保留在内存中。 关于ios - 应用程序结构:分页界面中的UIView与UIViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19436580/