2017-03-24 3 views
0
zweimal und Indizierung nicht wahr
- (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 Link gleiche wie diePageViewController vor und nach

genannt zählen der Fall ist:

  1. Swipe rechts von Index 0 bis Index 1
  2. der Index Erhöhe den Index auf 2, also mein Index +2
  3. wenn ich wieder wische wird es +1
  4. und sagen, ob jetzt habe ich in index bin 8, i Swipe
  5. der Index bis -6 sinken gelassen, so dass mein Index -2
  6. und wenn ich wieder streichen Sie nach links es index-- oder Index = Index wird - 2

brauchen Hilfe im Voraus, vor einer Woche hier stecken Danke

Antwort

1

viewControllerAfterViewController: und viewControllerBeforeViewController: sind UIPageViewControllerDelegate Methoden, die von UIPageViewController internen Controller

Der Grund aufgerufen werden Warum diese Methoden zweimal mit 1 Swipe aufgerufen werden, ist das zum Beispiel, wenn Sie nach rechts wischen (oder vorwärts gehen), bereitet es den nächsten View-Controller und einen anderen im Voraus für Sie vor, also also, wenn Sie dazu benötigt werden genauen Index haben, dass Benutzer aktuell ist, sollten Sie wahrscheinlich Delegatmethoden für das erhalten des aktuellen Index, wenn klauen, wie haben müssen:

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

und

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

zum Beispiel kann der Benutzer auf die Swipe Richtig, aber der Übergang wird nicht durchfallen, und der PageViewController-Swipe wird automatisch zum vorherigen Index zurückkehren, daher müssen Sie den Parameter completed verwenden um zu sehen, wenn der Index geändert wird oder nicht, etc ..

Lesen Sie mehr hier: https://developer.apple.com/reference/uikit/uipageviewcontrollerdelegate/1614090-pageviewcontroller?language=objc

+0

Im bereits hinzufügen, dass Methoden in meinem Code, aber immer noch kann ich den wahren Index –

+0

Hinweis erhalten, dass, wenn transitionCompleted ist falsch, wenn pageViewController: (UIPageViewController *) pageViewController didFinishAnimating: (BOOL) abgeschlossen previousViewControllers: (NSArray *) vorherigeViewControllers transitionCompleted: (BOOL) completed wird aufgerufen, Sie müssen den Index verringern, was bedeutet, dass der pageController-Transitionsindex nicht geändert wird. Es empfiehlt sich, den Index für jeden UIViewController im Array von pageViewController festzulegen. Daher ist dies der beste und einfachste Weg, den tatsächlichen aktuellen Index zu ermitteln. Es tut mir leid, ich könnte nicht mehr Hilfe für Sie sein :( – miljan

+0

okay, wie ich weiß, ob der Benutzer nach links wischen oder nach rechts wischen? Ich muss wissen, dass Benutzer dies tun, so kann ich den Index verringern und Index –

Verwandte Themen