ios - PageViewController 之前和之后调用两次并且索引不计为真

标签 ios objective-c xcode uipageviewcontroller

- (void)viewDidLoad {
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageController.dataSource = self;
[[self.pageController view] setFrame:CGRectMake(0, 0, self.viewParent.frame.size.width, self.viewParent.frame.size.height)];
initialViewController = [self viewControllerAtIndex:[[NSUserDefaults standardUserDefaults] integerForKey:@"indexAllQuestion"]];
viewControllers = [NSArray arrayWithObject:initialViewController];

[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self  addChildViewController:self.pageController];
[[self viewParent] addSubview:[self.pageController view]];
[self.pageController didMoveToParentViewController:self];
self.pageController.delegate = self;
self.pageController.dataSource = self;
}


- (AllComponentQuestionViewController *)viewControllerAtIndex:(NSUInteger)index {
current_question = self.all_question_keys[index];
AllComponentQuestionViewController *childViewController = [[AllComponentQuestionViewController alloc] initCurrent_question:current_question initCurrent_worksheet:current_worksheet iniTotalQuestion:maxDataCount];

[childSwipeVC replaceObjectAtIndex:index withObject:childViewController];
childViewController.indexChild = index;
return childViewController;}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
NSUInteger index = [(AllComponentQuestionViewController *)viewController indexChild];
if ((index == NSNotFound) || index <= 0) {
    index = 0;
    return nil;
}
else{
    index--;
    return [self viewControllerAtIndex:index];
}
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
NSUInteger index = [(AllComponentQuestionViewController *)viewController indexChild];
if (index >= maxDataCount) {
    index = maxDataCount;
    return nil;
}
else{
    index++;
    return [self viewControllerAtIndex:index];
}}

http://pasted.co/de8d5246这个链接和那个一样

案例是:

  1. 从索引 0 向右滑动到索引 1
  2. 索引增加到 2,所以我的索引 +2
  3. 如果我再次滑动它会+1
  4. 告诉我现在是否在索引 8 中,我向左滑动
  5. 指数会下降到-6,所以我的指数是-2
  6. 如果我再次向左滑动,它将索引-- 或 index = index - 2

提前需要帮助,一周前卡在这里 谢谢你

最佳答案

viewControllerAfterViewController:viewControllerBeforeViewController:UIPageViewControllerDataSource方法,由UIPageViewController内部 Controller 调用

这些方法在一次滑动时被调用两次的原因是,例如,如果您向右滑动(或向前滑动),它会提前为您准备下一个 View Controller 和另一个 View Controller ,因此,如果您需要拥有用户当前所在的确切索引,您可能需要使用委托(delegate)方法在滑动时获取当前索引,例如:

objective-C :

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

swift 4:

func pageViewController(_ pageViewController: UIPageViewController,
                        willTransitionTo pendingViewControllers: [UIViewController])

objective-C :

- (void)pageViewController:(UIPageViewController *)pageViewController 
        didFinishAnimating:(BOOL)finished 
   previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers 
       transitionCompleted:(BOOL)completed;

swift 4:

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

比如用户可以向右滑动,但是transition不会落空,pageViewController滑动会自动返回到之前的index,所以需要使用completed参数查看index是否改变等。 .

在这里阅读更多:https://developer.apple.com/reference/uikit/uipageviewcontrollerdelegate/1614090-pageviewcontroller?language=objc

关于ios - PageViewController 之前和之后调用两次并且索引不计为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42997299/

相关文章:

swift - 如何按日期 Swift NSPredicates 过滤 Realm 列表

ios - 使用自动布局约束动态调整表格 View 单元格的大小

ios - 在 App Store 上发布非常具体的 iOS 应用程序

ios - Cordova Ionic v1 App 在与 IOS 中的 branch.io 深度链接时崩溃

objective-c - 复制/粘贴在模态窗口中不起作用

ios - iPhone/iPad 相机叠加 View 自动旋转问题 UIImagePickerController

ios - SFSafariViewController 在导航栏和底部工具栏中是否始终具有相同的 UI 元素?

objective-c - 使用 fmdb 打印准备好的语句

iphone - ASIHTTPRequest 假人

ios - 如何在 XCode 4.1 中创建自定义可重用 UIControl