2014-07-29 3 views
4

Я пытаюсь реализовать UIPageViewController с проверкой на каждом шаге. Мой код работал нормально без проверки, поэтому все со страницами, похоже, сделано правильно. Это мой код:UIPageViewController viewControllerAfterViewController не вызывается после того, как однажды возвращено nil

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { 
    int index = [(MyViewController *) viewController index]; 
    index--; 
    return [_viewModel viewControllerAtIndex:index]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { 
    BOOL isDataValid = [(MyViewController *) viewController validateData]; 
    if (isDataValid) { 
     int index = [(MyViewController *) viewController index]; 
     index++; 
     return [_viewModel viewControllerAtIndex:index]; 
    } 
    return nil; 
} 

Моя проблема заключается в том, что, когда шаг 1 показано, viewControllerAfterViewController называется подготовить шаг 2, но потому, что шаг 2 не может быть действительным (пользователь не имеет возможности для ввода данных), поэтому его возвращает нуль. Я хотел бы, чтобы UIPageViewController звонил viewControllerAfterViewController каждый раз, когда пользователь пытается пронестись к следующему экрану и не сдаваться после получения нулевого значения. Это выполнимо?

ответ

12

UIPageViewController имеет базовый кеш. Вы можете сбросить его с помощью

pageViewController.dataSource = nil; 
pageViewController.dataSource = self; 

Вы можете позвонить ему, как только страница, на которой вы находитесь, станет действительной.

+0

работал! Нелегко заметить, что просмотр содержимого контроллера детского просмотра стал действительным, но теперь он работает! – KlimczakM

+0

Куда назвать этот метод @Lou Franco –

0

Столкнувшись Аналогичная проблема, я добавил следующий код (только вызов добавить подвид не хватает)

[self addChildViewController:vc]; 
[_viewCarouselContainer addSubview:vc.view]; 
[vc didMoveToParentViewController:self]; 

Теперь оба метода вызывался должным образом на соответствующем пойле

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

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController ; 
Смежные вопросы