Я пытался понять это в течение нескольких часов, и я должен быть недоразумением, как работает UIPageViewController
.Как изменить UIPageViewController из ININ одного из UIViewControllers, который является частью UIPageViewController?
У меня есть 5 экранов настройки (отдельные контроллеры просмотра, которые загружаются в UIPageViewController
), которые я могу пронести вправо + влево, чтобы видеть.
НО! Я хочу иметь возможность программно отображать следующий контроллер представления в строке после того, как они увольняют предупреждение на одном из этих контроллеров представлений.
И до сих пор, единственное решение, которое я нашел, что приближается, это решение здесь (https://github.com/jeffaburt/UIPageViewController-Post), что позволяет кнопку «Далее», но кнопка не на контроллере представления, который показывает, он находится на контроллере корневого представления, который содержит UIPageViewController
.
У меня есть UIPageViewController
, настроенный для отображения 5 различных контроллеров вида, с помощью этого кода.
private(set) lazy var orderedViewControllers: [UIViewController] = {
return [self.newColoredViewController("setup1"),
self.newColoredViewController("setup2"),
self.newColoredViewController("setup3"),
self.newColoredViewController("setup4"),
self.newColoredViewController("setup5")]
}()
Тогда функция newColoredViewController
делает это:
private func newColoredViewController(color: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil) .
instantiateViewControllerWithIdentifier("\(color)")
}
и вот мой viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
if let SetupViewController = orderedViewControllers.first {
setViewControllers([SetupViewController],
direction: .Forward,
animated: true,
completion: nil)
}
}
я должен отсутствовать некоторое фундаментальное понимание, потому что я попытался так много различных способов для изменения страницы программно, и ничего не происходит.
Я пытался сделать это, но она ничего не делает:
setViewControllers([orderedViewControllers[3]],
direction: .Forward,
animated: true,
completion: nil)
Я пытался сделать это, но она ничего не делает:
func scrollToNextViewController() {
if let visibleViewController = viewControllers?.first,
let nextViewController = pageViewController(self,
viewControllerAfterViewController: visibleViewController) {
scrollToViewController(nextViewController)
}
}
Пожалуйста, укажите мне в правильном направлении! Я могу исследовать весь день и, как правило, могу понять это из-за предыдущих вопросов stackoverflow, на которые уже ответил, но здесь я в тупике.
Спасибо заранее!
Ack! Я едва понимаю, как реализовать то, что вы только что объяснили. Итак, я должен изменить функцию 'private func newColoredViewController (color: String) -> UIViewController { return UIStoryboard (имя:« Main », bundle: nil). instantiateViewControllerWithIdentifier ("\ (color)") } ' и попытаться передать переменную? Когда вы говорите «переходите к ссылке на контроллер представления, как это сделать? –
Вы сказали, что есть более простые способы сделать это - не могли бы вы пролить свет на них? Я все для правильных способов сделать но, честно говоря, я не думаю, что смогу реализовать то, что вы объяснили, потому что я еще не такой уровень кодера !! –
Да, не возвращайте экземпляр напрямую, а удерживайте его в некоторой локальной переменной на мгновение и пройдите контроллер представления представления. Но мой совет - не объявлять параметр как объект класса контроллера представления, а использовать протокол между ними. Сочетание классов в обоих направлениях отлично работает, но на самом деле не очень хороший стиль. –