PageViewController 显示页面索引不正确?

Posted

技术标签:

【中文标题】PageViewController 显示页面索引不正确?【英文标题】:PageViewController showing the index of the page incorrectly? 【发布时间】:2016-06-14 05:28:16 【问题描述】:

我已按照本教程创建 PageViewController http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/ 问题是我错误地获取了页面,其余的一切都很完美

如果页面索引是最后一个索引,我需要做一些事情,然后我更改按钮标签。

- (PageContentViewController *)viewControllerAtIndex:(NSUInteger)index

    if (([self.pageImages count] == 0) || (index >= [self.pageImages count])) 
        return nil;
    

    // Create a new view controller and pass suitable data.
    PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];
    pageContentViewController.imageFile = self.pageImages[index];
    pageContentViewController.titleText = self.pageTitles[index];

    pageContentViewController.pageIndex = index;

    NSLog(@"INDEX : %lu", (unsigned long)index);

    return pageContentViewController;


- (void)pageViewController:(UIPageViewController *)pageViewCntr didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed

    NSInteger currentIndex = ((UIViewController *)self.pageViewController.viewControllers.firstObject).view.tag;
    if (completed) pageControl.currentPage = currentIndex;


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

    NSInteger index = ((PageContentViewController *)viewController).pageIndex;

    if (index == NSNotFound || !index) return nil;
    NSLog(@"INDEX : %lu", (unsigned long)index);
    return [self viewControllerAtIndex:index-1];


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

    NSInteger index = ((PageContentViewController *)viewController).pageIndex;

    if (index == NSNotFound || index == pageCount-1) return nil;
    NSLog(@"INDEX : %lu", (unsigned long)index);
    return [self viewControllerAtIndex:index+1];




- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController

    return [self.pageImages count];



- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController

    return 0;

我尝试了很多方法,但无法解决问题。

帮助我找到页面的当前索引。 页面索引当前未显示,当我滑动一次时,它一次返回 0,1 个索引,下一次滑动它显示我 2,下一次滑动它不返回任何索引

【问题讨论】:

最后一页打印什么pageContentViewController.pageIndex?你有多少页? @SanketBhavsar 从左到右和从右到左显示不同的索引,这是不正确的索引 你如何调用显示的方法?它返回/做什么?你期望它返回/做什么? 【参考方案1】:

我已经实现了相同的代码,在调试之后,我知道PageViewControllerDataSource 方法被调用了两次。因此,您可以使用willTransitionToViewControllers 方法而不是viewControllerBeforeViewControllerviewControllerAfterViewController 方法来获取正确的索引。

请参考以下答案,

PageViewController delegate functions called twice

【讨论】:

你能再给我一些解释吗 如果转换未完成,willTransitionToViewControllers 仍会被调用,因此不应用于跟踪索引。

以上是关于PageViewController 显示页面索引不正确?的主要内容,如果未能解决你的问题,请参考以下文章

滑动过快或连续左右滑动非常快时如何跟踪pageViewController的索引

如何让 PageViewController 显示不同的 ViewController

Pageviewcontroller 在 IOS 6 中不显示翻页动画

pageViewController 上的背景图像反向重叠

PageviewController 总是返回一个像 2147483648 这样的索引

使用segue按下按钮后禁用PageViewController - Swift 4