2015-04-23 114 views
0

我已经实现了一个UIPageViewController,我希望能够无限滚动到右侧(如用户向左滑动),并且能够向另一个方向向后滚动一路开始。不过,我不希望用户能够在第一页上向左滚动(如用户向右滑动),即使我只有三页循环,我该怎么做?UI页面视图控制器滚动不会向后滚动

我已经想出了如何使右侧有三个视图控制器的无限滚动(如用户向左滚动),但是当用户尝试向左滚动时(如用户向右滑动)它错了,屏幕变白了?

任何人都可以改进这个代码,这样用户可以无限滚动双向,而不仅仅是一个?并且如果可能的话,防止用户在第一个面板上向后滚动?谢谢。

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 

回答

0

您可以使用标志来知道初始视图(第一种观点)。然后用这个卷轴启用和禁用方法,以防止刷卡。

-(void)setScrollEnabled:(BOOL)enabled forPageViewController:(UIPageViewController*)pageViewController{ 
for(UIView* view in pageViewController.view.subviews){ 
    if([view isKindOfClass:[UIScrollView class]]){ 
     UIScrollView* scrollView=(UIScrollView*)view; 
     [scrollView setScrollEnabled:enabled]; 
     return; 
    } 
} 

希望这会起作用。

相关问题