【发布时间】:2015-04-23 09:53:18
【问题描述】:
我已经实现了一个 UIPageViewController,我希望它能够无限地向右滚动(就像用户向左滑动一样),并且能够在另一个方向上向后滚动一直到开始。但是我不希望用户能够在第一页上向左滚动(就像用户向右滑动一样),即使我只有三个循环的页面,我该怎么做?
我已经想出了如何使三个视图控制器向右无限滚动(如用户向左滚动)但是当用户尝试向左滚动时(如用户向右滑动)它出现错误并且屏幕变白?
任何人都可以改进此代码,以便用户可以无限滚动双向,而不仅仅是一个?如果可能的话,防止用户在第一个面板上向后滚动?谢谢。
PageViewController.h
#import <UIKit/UIKit.h>
@interface PageViewController : UIPageViewController
<UIPageViewControllerDelegate, UIPageViewControllerDataSource>
@end
PageViewController.m
#import "PageViewController.h"
@interface PageViewController ()
@end
@implementation PageViewController
{
NSArray *myViewControllers;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.delegate = self;
self.dataSource = self;
UIViewController *p1 = [self.storyboard
instantiateViewControllerWithIdentifier:@"ContentViewController1"];
UIViewController *p2 = [self.storyboard
instantiateViewControllerWithIdentifier:@"ContentViewController2"];
UIViewController *p3 = [self.storyboard
instantiateViewControllerWithIdentifier:@"ContentViewController3"];
myViewControllers = @[p1,p2,p3];
[self setViewControllers:@[p1]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO completion:nil];
NSLog(@"loaded!");
}
-(UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
return myViewControllers[index];
}
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];
--currentIndex;
currentIndex = currentIndex % (myViewControllers.count);
return [myViewControllers objectAtIndex:currentIndex];
}
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];
++currentIndex;
currentIndex = currentIndex % (myViewControllers.count);
return [myViewControllers objectAtIndex:currentIndex];
}
-(NSInteger)presentationCountForPageViewController:
(UIPageViewController *)pageViewController
{
return myViewControllers.count;
}
-(NSInteger)presentationIndexForPageViewController:
(UIPageViewController *)pageViewController
{
return 0;
}
@end
【问题讨论】:
标签: ios objective-c xcode uipageviewcontroller infinite-scroll