IOS - UIPageViewController 使用页面卷曲效果转到上一页并在每个页面上显示页码

Posted

技术标签:

【中文标题】IOS - UIPageViewController 使用页面卷曲效果转到上一页并在每个页面上显示页码【英文标题】:IOS - UIPageViewController go to previous page using page curl effect and show page number on each pages 【发布时间】:2016-10-24 12:58:50 【问题描述】:

我是新来使用 UIPageViewController,

我想制作具有相同视图的左右滑动的应用程序。我只使用一个 uitableview 来无限滑动 uipageviewcontroller。

使用滚动效果可以正常工作,但是当我使用页面卷曲效果时,它只允许向右滑动并且没有转到上一页。

这是我的 PageViewController 文件代码:

- (void)viewDidLoad 
    [super viewDidLoad];
    self.dataSource = self;
    self.delegate = self;
    [self didMoveToParentViewController:self];
    _counter = 0;

    [self setViewControllers:@[[self.storyboard instantiateViewControllerWithIdentifier:@"memoTable"]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];

    // Do any additional setup after loading the view.


- (BOOL)prefersStatusBarHidden 
    return YES;


#pragma mark PageViewController delegate method

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController

    NSLog(@"Child controller counter before  = %d", _counter);

    if ([viewController isKindOfClass:[PageController class]])
        return nil;

    if(_counter < 1) 
        return nil;
    

    self.view.backgroundColor = [UIColor lightGrayColor];
    return [self.storyboard instantiateViewControllerWithIdentifier:@"memoTable"];


- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController

    NSLog(@"Child controller counter after  = %d", _counter);
    if ([viewController isKindOfClass:[PageController class]])
        return nil;
    return [self.storyboard instantiateViewControllerWithIdentifier:@"pageView"];

那么如何使用卷曲效果和左右滑动来实现这一点。

谢谢。

【问题讨论】:

您是否尝试过将第一页卷曲到右侧和左侧?你能得到左滑动代表吗?? 如果我删除 return nil;在计数器 【参考方案1】:

因为你需要在单边无限,你需要检查你index,如果它的0比return nil更重要。

查看PageViewController的一些方法:

// Create the data model.
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        _pageData = [[dateFormatter monthSymbols] copy];

- (DataViewController *)viewControllerAtIndex:(NSUInteger)index storyboard:(UIStoryboard *)storyboard 
    // Return the data view controller for the given index.
    if (([self.pageData count] == 0) || (index >= [self.pageData count])) 
        return nil;
    

    // Create a new view controller and pass suitable data.
    DataViewController *dataViewController = [storyboard instantiateViewControllerWithIdentifier:@"DataViewController"];
    dataViewController.dataObject = self.pageData[index];
    return dataViewController;


- (NSUInteger)indexOfViewController:(DataViewController *)viewController 
    // Return the index of the given data view controller.
    // For simplicity, this implementation uses a static array of model objects and the view controller stores the model object; you can therefore use the model object to identify the index.
    return [self.pageData indexOfObject:viewController.dataObject];


#pragma mark - Page View Controller Data Source

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController

    NSUInteger index = [self indexOfViewController:(DataViewController *)viewController];
    if ((index == 0) || (index == NSNotFound)) 
        return nil;
    

    index--;
    return [self viewControllerAtIndex:index storyboard:viewController.storyboard];


- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController

    NSUInteger index = [self indexOfViewController:(DataViewController *)viewController];
    if (index == NSNotFound) 
        return nil;
    

    index++;
    if (index == [self.pageData count]) 
        return nil;
    
    return [self viewControllerAtIndex:index storyboard:viewController.storyboard];

您还必须管理一个数组才能识别每一件事index | count

在上述情况下,self.pageData 是我管理页面的数组。 如果您需要任何帮助,请告诉我。

【讨论】:

你能添加你的数组吗?什么是DataViewController? @CodeChanger DataViewController 只不过是我需要在页面视图中显示的视图控制器。 你的数组中有什么样的数据?我怎样才能使用这个数组? @CodeChanger 从一月到十二月的正常月份数据,你可以在这里使用任何类型的数据。 什么是“dataObject”,因为我在这方面遇到了错误。

以上是关于IOS - UIPageViewController 使用页面卷曲效果转到上一页并在每个页面上显示页码的主要内容,如果未能解决你的问题,请参考以下文章

iOS 自动布局 ios 7 与 ios 8

iOS 8、iOS 9、iOS 10 和 iOS 11 上的 UITabBar 的高度是多少?

最佳实践。通过支持 iOS 5、iOS 6 和 iOS 7 UI 使 iOS 应用程序通用

iOS 应用程序 - 如何仅为 iOS 8 用户添加 iOS 8 功能,同时仍支持所有 iOS 7 用户

ios手游平台 ios手游推荐 ios手游排行 ios手游模拟器 ios手游盒子

李洪强iOS开发之iOS学习方法收集