带有子视图控制器的分页滚动视图

7

如何最佳实践地使用水平滚动视图和分页,每个页面只有一个视图控制器?

现在iOS5已经提供了视图控制器容器/包含的API,那么PageControl示例是否仍然是实现此功能的最佳方式?


你现在使用的是什么方法?我使用苹果PageControl示例中展示的方法。它能够工作,但仍然存在一些错误情况:与旋转相关,可能是因为ScrollView不是一个ViewController。 - AlexWien
我使用了一个UIPageViewController和UIPageViewControllerTransitionStyleScroll,但是在向滚动视图的开头和结尾添加新的视图控制器时遇到了很多边缘情况,这使得它的实现并不比PageControl类型的方法更容易。 - railwayparade
6个回答

6

我知道这个问题有点老了,但是从iOS 6开始,UIPageViewController有一个新的转场风格属性叫做UIPageViewControllerTransitionStyleScroll,它允许您像您所描述的那样使用页面控制器,在页面之间进行简单的滚动,而不是iBooks风格的翻页转换。

您还应该观看2012年WWDC视频编号为223 - Enhancing User Experience with Scroll Views,他们基本上将使用您所描述的方法的旧应用程序转换为带有滚动式转场的新UIPageViewController。


2
我的答案是,这取决于你的目标。如果你想尽可能高效地制作一个应用程序,我建议直接使用示例代码中的方法。我以前用过它,也会再次使用。
另一方面,如果你的目标是学习视图控制器容器,了解它的工作原理以及如何使用它,那么这可能是一个很好的实例去尝试。如果你选择这种方式,请不要忘记查看WWDC视频“实现UIViewController容器”(https://developer.apple.com/videos/wwdc/2011/)。

谢谢,我看了 WWDC 视频,不是苹果最好的之一,很令人困惑。该视频讨论了 UIViewController 在管理屏幕不同部分的上下文中的包容性,这与滚动视图不同。页面控制示例的问题在于它已经过时了,没有故事板等。 - railwayparade

2

iOS5最佳实践是继续使用PageControl示例中的相同方法。这是一个控制器类(注意不是视图控制器)。每个页面都有子视图控制器。

目前还没有文档记录更好的方法来使用iOS5中包含的视图控制器容器方法来实现分页滚动视图。


-1

我认为UIPageViewController可以水平滑动:

- (id)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation options:(NSDictionary *)options

enum {
    UIPageViewControllerNavigationOrientationHorizontal = 0,
    UIPageViewControllerNavigationOrientationVertical = 1
};
typedef NSInteger UIPageViewControllerNavigationOrientation;

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIPageViewControllerClassReferenceClassRef/UIPageViewControllerClassReference.html


感谢您的回复。UIPageViewController仅支持在页面之间进行页面转换。我正在寻找在多个页面之间水平滚动的最佳方法,就像pagecontrol示例中每个视图控制器只有一页一样。 - railwayparade

-1

感谢您的回复。UIPageViewController不支持水平翻页而没有页面翻转动画,这正是我所需要的。 - railwayparade

-1
如果您将您的视图控制器视图(myViewControllerOne.view)添加到UIScrollView中,并适当地对它们进行水平框架设置,当用户在滚动视图内与该视图交互时,视图控制器中的方法将被调用。
我的意思是,如果您将MyViewControllerOne.view作为子视图放置在滚动视图中,当您滚动到滚动视图的那一页并按下按钮时,MyViewControllerOne中附加的方法(IBAction等)将被调用。
这应该为您提供所需的所有功能,例如添加UI元素、表格、另一个滚动视图等。这些元素将从它们的原始视图控制器中进行控制。
希望这可以帮助您!

谢谢RachelD,这就是我所做的。问题更多地涉及最佳实践是什么。请注意,将一个视图控制器的视图添加到另一个视图层次结构中可能会出现问题。请参见http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/。 - railwayparade
这不是正确的方式,你永远不应该这样做! - ninja_iOS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接