Можно ли программно перевернуть страницу UIPageViewController
?
ios
ios5
uikit
uipageviewcontroller
RAGOpoR
источник
источник
Ответы:
Да, это возможно с помощью метода:
Это тот же метод, который используется для настройки первого контроллера представления на странице. Похоже, вы можете использовать его для перехода на другие страницы.
Интересно, почему
viewControllers
массив, а не один контроллер представления?Это связано с тем, что контроллер просмотра страниц может иметь «позвоночник» (как в iBooks), отображающий 2 страницы контента одновременно. Если вы одновременно отображаете 1 страницу контента, просто передайте массив из 1 элемента.
Пример в Swift:
источник
Поскольку мне это тоже нужно, я более подробно расскажу, как это сделать.
Примечание: я предполагаю, что вы использовали стандартную шаблонную форму для генерации вашей
UIPageViewController
структуры - которая какmodelViewController
иdataViewController
создана, когда вы вызываете ее. Если вы не понимаете, что я написал - вернитесь и создайте новый проект, который использует вUIPageViewController
качестве основы. Вы поймете тогда.Таким образом, необходимость перехода на определенную страницу включает в себя настройку различных частей метода, перечисленных выше. В этом упражнении я предполагаю, что это ландшафтный вид с отображением двух видов. Кроме того, я реализовал это как IBAction, чтобы это можно было сделать нажатием кнопки или чего-то еще - это так же легко сделать вызов селектора и передать необходимые элементы.
Итак, для этого примера вам понадобятся два контроллера представления, которые будут отображаться - и при желании, идете ли вы вперед в книге или назад.
Обратите внимание, что я просто жестко запрограммировал, куда нужно перейти на страницы 4 и 5 и использовать промах. Отсюда вы можете видеть, что все, что вам нужно сделать, это передать переменные, которые помогут вам получить эти элементы ...
источник
Вот еще один пример кода для одного постраничного представления. Реализация для viewControllerAtIndex здесь опущена, она должна возвращать правильный контроллер представления для данного индекса.
Страницы могут быть изменены по телефону
источник
Я мог бы что-то здесь упустить, но это решение кажется намного проще, чем предлагали многие другие.
источник
Этот код работал хорошо для меня, спасибо.
Это то, что я сделал с этим. Некоторые методы для перехода вперед или назад и один для перехода непосредственно на определенную страницу. Это для 6 страниц документа в книжной ориентации. Это будет работать нормально, если вы вставите его в реализацию RootController шаблона pageViewController.
источник
Свифт 4:
Мне нужно было перейти к следующему контроллеру, когда я коснусь следующего на контроллере представления pagecontroller, а также обновил индекс pageControl, так что это было лучшее и простое решение для меня :
источник
Как насчет использования методов из источника данных?
Аналогично для обратной.
источник
В Свифте :
источник
Однако использование этого метода «self.pageViewController setViewControllers» не вызывает «viewDidDissapear» для viewController для отклоненной страницы, тогда как ручное перелистывание страницы вызывает viewDidDissapear на отклоненной странице. Я считаю, что это причина моего крушения
«Количество предоставленных контроллеров представления (0) не соответствует числу, требуемому (1) для запрошенного перехода»
источник
Мне также нужна была кнопка для перемещения влево на PageViewController, которая должна делать именно то, что вы ожидаете от движения пальцем.
Поскольку у меня уже есть несколько правил внутри " pageViewController: viewControllerBeforeViewController " для работы с естественной навигацией по свайпам , я хотел, чтобы кнопка повторно использовала весь этот код, и просто не мог позволить себе использовать определенные индексы для доступа к страницам, как в предыдущем ответы сделали. Итак, мне пришлось принять альтернативное решение.
Обратите внимание, что следующий код предназначен для Контроллера просмотра страниц, который является свойством внутри моего пользовательского ViewController, и его позвоночник установлен в середине.
Вот код, который я написал для моей левой кнопки навигации:
Вы можете сделать что-то очень похожее, чтобы сделать правильную навигационную кнопку отсюда.
источник
В случае, если PAGE CONTROL для обозначения текущей страницы - O &&. Вы хотите, чтобы страницы перемещались с помощью прокрутки, а также путем нажатия пользовательских кнопок в ViewController страницы, ниже может оказаться полезным.
// Делегировать вызываемый viewControllerAfterViewController при прокрутке пользователем до следующей страницы
}
}
// Логика пользовательских кнопок (предыдущая и следующая)
}
}
источник
// теперь вызываем этот метод
[self moveToPage];
Надеюсь это работает :)
источник
Для одной страницы я только что отредактировал ответ @Jack Humphries
источник
Как отметил @samwize, способ разбиения на страницы заключается в использовании
Вот как я это сделал: у меня отдельный источник данных и делегат. Вы можете вызвать этот метод и изменить только «следующее» представление. Ранее вы должны применять правила подкачки. То есть вы должны проверить направление и следующий контроллер. Если вы используете этот метод со своим пользовательским источником данных, отображаемый массив контроллеров не изменится (поскольку вы будете использовать пользовательский массив в подклассе NSObject).
Используя ваш собственный источник данных, метод просто устанавливает новое представление (с определенным направлением). Так как вы все равно будете контролировать страницы, которые будут отображаться при обычном перелистывании.
источник
Я работаю над этим со вчерашнего дня, и я наконец сделал это работает. Я не мог использовать стандартный шаблон полностью, потому что у меня есть три разных viewControllers как дочерние виды:
Мне нужна была кнопка запуска только в первом VC, поэтому я добавил одно свойство для pageViewController и модели:
Я переписал метод init модели, чтобы передать раскадровку и pageViewController в качестве параметров, чтобы я мог установить их для моего VC1:
Наконец, я добавил IBAction в свой vc1 для запуска метода pageViewController setViewControllers: direction: animated: завершение ::
Обратите внимание, что мне не нужно искать индексы VC, моя кнопка переводит меня на второй VC, но не сложно получить все индексы и отслеживать ваши дочерние представления:
Я надеюсь, что это поможет вам!
источник
Вот решение с использованием методов UIPageViewControllerDataSource :
Код отслеживает текущий отображаемый контроллер представления в UIPageViewController .
Сначала инициализируйте currentViewController для начального контроллера представления, установленного для UIPageViewController .
Затем следить currentViewController в UIPageViewControllerDelegate методами: pageViewController: willTransitionToViewControllers: и pageViewController: didFinishAnimating: previousViewControllers: transitionCompleted: .
Наконец, в способе по вашему выбору (в приведенном ниже примере это - (IBAction) onNext: (ID) отправителя ), вы можете программно перейти к следующему или предыдущему контроллеру с помощью UIPageViewControllerDataSouce методов pageViewController: viewControllerBeforeViewController: , pageViewController: viewControllerAfterViewController: чтобы получить следующий или предыдущий вид контроллера и перейдите к нему, вызвав [self.pageViewController setViewControllers: @ [vc] direction: UIPageViewControllerNavigationDirectionForward animated: YES завершение: nil];
источник
Поскольку ViewControllers встроены в PageViewController, все, что вам нужно сделать, это:
Пример в Xamarin, но функционально похожий на Swift и т. Д. Следующий код будет в делегате Button Click в одном из ViewControllers, отображаемом в виде страницы:
источник