UIPageViewController направление только вперед

Цель состоит в том, чтобы создать UIPageViewController, который может перемещаться только вперед. Я использую источник данных для предоставления контента для UIPageViewController. Направление установлено наUIPageViewControllerNavigationDirectionForwardстиль переходаUIPageViewControllerTransitionStyleScroll.

Реализация

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    // returns the next view controller
}

возвращает следующий контроллер представления, в то время как следующее должно гарантировать, что навигация в обратном направлении невозможна

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    return nil;
}

Возвращение ноль должно указывать на то, что навигация невозможна (как указано в документации). Однако у меня всегда есть возможность прокрутить назад одну страницу. Позволять'Например, у меня есть 10 страниц, я могу прокрутить все страницы вперед, но на любой странице я могу прокрутить назад на 1 страницу. (Например: на странице 5 я могу вернуться на страницу 4, на странице 8 я могу вернуться на страницу 7 и т. Д.)

Я знаю, что могу избежать этого, не используя источник данных и используяsetViewControllers: Направление: анимированные: завершение: метод, но яЯ хотел бы понять, почему моя попытка не удалась.

Ответы на вопрос(1)

Решение Вопроса

которое вы получаете, когда ваш pageViewController имеет свой стиль перехода, установленный на прокрутку - яЯ не уверен, почему, но это как-то связано с тем, что представление прокрутки где-то вставляется в иерархию (что я мог бы увидеть при выделении, если бы я запускал свой проект с включенными инструментами). Если переход является Page Curl, то вы нене будет отображаться ни одна предыдущая страница, если вы вернули ноль, где вы делаете.

Итак, я думаю, что вызацикливайтесь на использовании setViewControllers: direction: animated: complete: если вы не хотите переключаться на анимацию Page Curl.

 rdelmar20 янв. 2013 г., 20:41
@ ммви, яЯ не уверен, почему Apple настроил это так - я заметил, что при первом смахивании влево (прямое направление) вызывается viewControllerAfterViewController, затем viewControllerBeforeViewController и затем снова viewControllerAfterViewController, если для стиля задана прокрутка. Я предполагаю, что они делают это, чтобы добавить соответствующие контроллеры представления к представлению прокрутки, чтобы вы могли видеть текущий, а также до и после при панорамировании.
 mmvie20 янв. 2013 г., 20:27
Спасибо. Использование PageCurl действительно работает. Поиск этого привел к нахождению этого замечательного ответа:stackoverflow.com/questions/12939280/...
 mmvie21 янв. 2013 г., 10:31
Я тоже это заметил. Они действительно гарантируют, что следующий и предыдущий viewControllers всегда находятся в pageViewController 's список viewControllers. Вероятно, чтобы избежать каких-либо задержек, вызванных созданием представлений и, следовательно, создать хороший пользовательский опыт. Мне интересно, это ожидаемое поведение или нет, если направление установлено только для пересылки и при явном возврате nil в viewControllerBeforeViewController ...
 rdelmar21 янв. 2013 г., 17:30
@ ммви, я нене знаю оожидается», Это может быть непреднамеренным следствием загрузки представления прокрутки, но я бы не сталне могу назвать это ошибкой. Там действительно неттолько вперед mode - прямой или обратный аргумент для setViewControllers: direction: animated: завершение: просто определяет, какую анимацию вы получите, если перейти на определенную страницу - это не такне имеет никакого отношения к направлению, которое вы получаете, когда проводите.

Ваш ответ на вопрос