在UIPageViewController中,当“pageViewController:viewControllerBeforeViewController”被调用?

我尝试在UIPageViewController显示照片。 首先,我在集合视图中显示我的照片,然后点击一张照片进入页面视图。 当我在页面视图,但是,如果我滚动当前照片(向右或向左),我发现pageViewController:viewControllerBeforeViewControllerpageViewController:viewControllerAfterViewController方法将被调用(通过调用NSLog我发现它)。

这两种方法中只有一种应该被调用一次? 我很困惑,并有很大的麻烦更新我的photoNumber显示我想要的照片。

这是我的页面查看代码:

 #import "PhotoPageViewController.h" #import "PhotoViewController.h" @interface PhotoPageViewController () @property (nonatomic)NSInteger previousPhotoNumber; @end @implementation PhotoPageViewController - (void)viewDidLoad { [super viewDidLoad]; self.dataSource = self; self.delegate = self; self.numberOfPhotosInCurrentAlbum = [Photo numberOfPhotosInAlbumWithName:self.albumName inManagedObjectContext:self.context]; PhotoViewController *currentPhotoViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PhotoContentViewController"]; currentPhotoViewController.photoNumber = self.currentPhotoNumber; currentPhotoViewController.albumName = self.albumName; currentPhotoViewController.context = self.context; currentPhotoViewController.ppvc = self; currentPhotoViewController.numberOfPhotosInCurrentAlbum =self.numberOfPhotosInCurrentAlbum; [self setViewControllers:@[currentPhotoViewController] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL]; } #pragma mark - Page View Controller Datasource - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { if (self.currentPhotoNumber > 0) { NSLog(@"in before section: current photo %lu", self.currentPhotoNumber); PhotoViewController *photoBeforeCurrentPhoto = [self.storyboard instantiateViewControllerWithIdentifier:@"PhotoContentViewController"]; photoBeforeCurrentPhoto.photoNumber = self.currentPhotoNumber - 1; photoBeforeCurrentPhoto.albumName = self.albumName; photoBeforeCurrentPhoto.context = self.context; photoBeforeCurrentPhoto.ppvc = self; self.previousPhotoNumber = self.currentPhotoNumber; self.currentPhotoNumber--; return photoBeforeCurrentPhoto; } return nil; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { if (self.currentPhotoNumber < self.numberOfPhotosInCurrentAlbum - 1) { NSLog(@"in after section: current photo %lu", self.currentPhotoNumber); PhotoViewController *photoAfterCurrentPhoto = [self.storyboard instantiateViewControllerWithIdentifier:@"PhotoContentViewController"]; photoAfterCurrentPhoto.photoNumber = self.currentPhotoNumber + 1; photoAfterCurrentPhoto.albumName = self.albumName; photoAfterCurrentPhoto.context = self.context; photoAfterCurrentPhoto.ppvc = self; self.previousPhotoNumber = self.currentPhotoNumber; self.currentPhotoNumber++; return photoAfterCurrentPhoto; } return nil; } 

PhotoViewController是显示照片的视图控制器。

任何人都可以给我一些关于使用UIPageViewControllerbuild议吗?

提前致谢!

UIPageViewController使用下面的方法获取前后的ViewController。

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

尽pipe它很奇怪,但它是一个已知的问题。 每次调用Before和After方法来获得VC。 它没有下一个VC,那么它返回nil,如果没有以前的VC,则datasourceDelegate返回nil,否则返回VC的索引。

UIPageViewControllerDelegate ,有一个名为:

 - (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers; 

看看这可能有助于从pendingViewControllers数组获取当前或下一个/上一个pendingViewControllers

希望这可以帮助.. :)