【问题标题】:UI Page View Controller Scroll Won't Scroll BackwardsUI 页面视图控制器滚动不会向后滚动
【发布时间】: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


    【解决方案1】:

    您可以使用Flag来了解初始视图(第一个视图)。然后使用此滚动启用和禁用方法来防止滑动。

    -(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;
        }
    }
    

    希望这会奏效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2023-03-30
      • 2021-12-31
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      相关资源
      最近更新 更多