- (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这个链接和那个一样
案例是:
- 从索引 0 向右滑动到索引 1
- 索引增加到 2,所以我的索引 +2
- 如果我再次滑动它会+1
- 告诉我现在是否在索引 8 中,我向左滑动
- 指数会下降到-6,所以我的指数是-2
- 如果我再次向左滑动,它将索引-- 或 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是否改变等。 .
关于ios - PageViewController 之前和之后调用两次并且索引不计为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42997299/