2014-07-05 2 views
3

Я видел похожие вопросы о stackoverflow (например, here и here), но ни один из них не имеет четких ответов. Я последовал за this tutorial, но создал отдельный файл UIViewController со своим собственным .xib для каждой страницы, которую я хотел отобразить. При первом прокрутке вызывается как viewControllerBeforeViewController, так и viewControllerAfterViewController. Учебник использует оба этих метода для увеличения или уменьшения значения pageIndex. Итак, в конце концов я вижу pageIndex, инициализированный 0, затем устанавливается значение 1, когда вызывается viewControllerAfterViewController, а затем сразу устанавливается 0, когда вызывается viewControllerBeforeViewController. В конечном итоге это приводит к неправильному отображению страниц.UIPageViewController, вызывающий оба viewControllerBeforeViewController и viewControllerAfterViewController

ответ

2

Вот как я обошел это.

В каждом контроллере просмотра страницы я создал свойство readonly под названием index, которое я назначил в его реализации как соответствующее значение (например, 1, 2 или 3). Тогда я сделал это:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    NSInteger pageIndex = 0; 
    if ([viewController isKindOfClass:[MainMenuPage0ViewController class]]) { 
     MainMenuPage0ViewController *mainMenuPage0ViewController = (MainMenuPage0ViewController *)viewController; 
     pageIndex = mainMenuPage0ViewController.index; 
     pageIndex--; 
    } else if ([viewController isKindOfClass:[MainMenuPage1ViewController class]]) { 
     MainMenuPage1ViewController *mainMenuPage1ViewController = (MainMenuPage1ViewController *)viewController; 
     pageIndex = mainMenuPage1ViewController.index; 
     pageIndex--; 
    } else if ([viewController isKindOfClass:[MainMenuPage2ViewController class]]) { 
     MainMenuPage2ViewController *mainMenuPage2ViewController = (MainMenuPage2ViewController *)viewController; 
     pageIndex = mainMenuPage2ViewController.index; 
     pageIndex--; 
    } 

    if (pageIndex < 0) { 
     return nil; 
    } 

    return [self viewControllerAtIndex:pageIndex]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    NSInteger pageIndex = 0; 
    if ([viewController isKindOfClass:[MainMenuPage0ViewController class]]) { 
     MainMenuPage0ViewController *mainMenuPage0ViewController = (MainMenuPage0ViewController *)viewController; 
     pageIndex = mainMenuPage0ViewController.index; 
     pageIndex++; 
    } else if ([viewController isKindOfClass:[MainMenuPage1ViewController class]]) { 
     MainMenuPage1ViewController *mainMenuPage1ViewController = (MainMenuPage1ViewController *)viewController; 
     pageIndex = mainMenuPage1ViewController.index; 
     pageIndex++; 
    } else if ([viewController isKindOfClass:[MainMenuPage2ViewController class]]) { 
     MainMenuPage2ViewController *mainMenuPage2ViewController = (MainMenuPage2ViewController *)viewController; 
     pageIndex = mainMenuPage2ViewController.index; 
     pageIndex++; 
    } 

    if (pageIndex == 3) { 
     return nil; 
    } 

    return [self viewControllerAtIndex:pageIndex]; 
} 
+0

Быстрый код пожалуйста? –

+0

Я не работал над iOS в течение нескольких лет и не стал быстро учиться. Должно быть довольно прямо переводимым, хотя. –

0

Я думаю, что это может быть упрощен, как сильфон. Существует не так много if/else. Суть заключается в том, чтобы понять, что нам нужно рассчитать новый индекс только в том случае, если он действителен, если он находится между 0 и числом страниц:

func pageViewController(_ pageViewController: UIPageViewController, 
        viewControllerBefore viewController: UIViewController) -> UIViewController? { 
    let pageContent: HomeCardVC = viewController as! HomeCardVC 

    if var index = pageContent.pageIndex { 
     if (index == 0 || index == NSNotFound) { 
      return nil; 
     } 
     index = index - 1; 

     return getViewControllerAtIndex(index: index) 
    } 
    return nil 
} 

func pageViewController(_ pageViewController: UIPageViewController, 
        viewControllerAfter viewController: UIViewController) -> UIViewController? { 
    let pageContent: HomeCardVC = viewController as! HomeCardVC 

    if var index = pageContent.pageIndex { 
     if (index == NSNotFound || index == providersList.count - 1) { 
      return nil 
     } 

     index = index + 1; 
     return getViewControllerAtIndex(index: index) 
    } 
    return nil 
} 
Смежные вопросы