UIPageViewController:获取currentPage

use*_*133 24 iphone objective-c ios6

在过去的几天里,我一直在努力解决这个问题,经过这个杂耍之后,我发现我只需要数据源方法的当前索引来更新当前可见的页码

我有这个UIPageViewController数据源方法,我需要使用当前索引来获取委托方法的当前可见页面previousViewControllers transitionCompleted:(BOOL)completed

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
   viewControllerAfterViewController:(UIViewController *)viewController { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"pages" ofType:@"pdf"];

    NSURL *pdfurl = [NSURL fileURLWithPath:path];
    PDFDocument = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfurl);

    contentViewController = [[ContentViewController alloc] initWithPDFAtPath:path];

    currentIndex = [modelArray indexOfObject:[(ContentViewController *)viewController page]];

    if (currentIndex == totalPages - 1) {  
        return nil;
    }

    contentViewController.page = [modelArray objectAtIndex:currentIndex + 1];

    return contentViewController;
}
Run Code Online (Sandbox Code Playgroud)

我对如何将当前索引语句从datasource方法写入委托方法以更新当前可见页面感到困惑.

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

    if (!completed)
    {
        return;
    }

    //currentIndex = [[self.pageViewController.viewController lastObject]];  
    currentIndex = [self indexOfObject:contentViewController];

    [self displaycurrentIndex:currentIndex];
    //self.pageControl.currentPage = currentIndex;
}
Run Code Online (Sandbox Code Playgroud)

我怎么能纠正这个?

Wai*_*ain 26

看起来您应该能够获得当前索引:

ContentViewController *viewController = [self.pageViewController.viewControllers lastObject];
currentIndex = [modelArray indexOfObject:[viewController page]];
Run Code Online (Sandbox Code Playgroud)


sof*_*789 19

对于swift:

func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool){
        let pageContentViewController = pageViewController.viewControllers![0] as! ViewController
        let index = pageContentViewController.pageIndex

}
Run Code Online (Sandbox Code Playgroud)

  • “ViewController”类型的值没有成员“pageIndex” (5认同)
  • 当用户向后滑动时,您将没有当前索引 (3认同)

djd*_*nce 8

如果您实现ModelController(如Apple示例中所示),请使用它的方法indexOfViewController

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
    myDataViewController *currentView = [pageViewController.viewControllers objectAtIndex:0];
    NSInteger currentIndex = [_modelController indexOfViewController:currentView];
    [self displayPageNumber:currentIndex];
}
Run Code Online (Sandbox Code Playgroud)


Man*_*ngh 5

我在 pageViewController 上面临同样的问题,每次我刷我的 pageViewController 时,它都会调用我的委托两次,但找不到问题。而且我的数组是动态的,所以我想要来自 pageController 的正确索引值。首先设置 pageViewController 的委托。像这样 :-

self.pageViewController.delegate = self;
Run Code Online (Sandbox Code Playgroud)

然后将此委托方法添加到您的类中

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
if (completed) {
    NSInteger currentIndex = ((PageContentViewController *)self.pageViewController.viewControllers.firstObject).pageIndex;

    NSLog(@"%ld",(long)currentIndex);
}
}
Run Code Online (Sandbox Code Playgroud)

PageContentViewController 是您在其中显示 pageViewController 数据的类。 我的 PageContentViewController 类看起来像这样

运行您的项目,如果一切正常,您将获得索引值。 PageIndex是用于获取当前索引的整数值。希望它会帮助你。

谢谢

曼迪普·辛格


Joh*_*han 5

我的方法很简单:

  1. 当页面(控制器)被实例化时,我传入页面索引,此时该索引是已知的。

  2. 然后在下面的委托调用中,如果转换完成,我将获取当前显示的控制器并将其转换为我的自定义页面类,然后再使用关联的页面索引获取和更新 currentPage。

为了简单起见,我将数据源和委托设置为WalkThroughController嵌入页面视图控制器。

extension WalkThroughController: UIPageViewControllerDelegate {

    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {

        guard finished, let currentPageController = pageViewController.viewControllers?.last as? WalkThroughPageViewController else {
            return
        }

        self.currentPage = currentPageController.pageIndex
    }

}
Run Code Online (Sandbox Code Playgroud)

要点是在数据源中创建页面时设置页面的页面索引。通过这种方法,以后检索它非常简单。