Моя проблема заключается в следующем: я использую pageViewControllers для создания страницы учебника/onboarding для приложения, которое я создаю. Левый салфетки на последней (третьей) странице моего учебника должен выполнить сеанс.выполнить segue из pageViewController
Это то, что у меня есть на данный момент, но оно дает мне ошибку кодирования с ключевым значением. У меня двойная, тройная проверка моих выходов, и swipeView
очень правильно подключен.
class GrowController: UIViewController {
@IBOutlet weak var swipeView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(swipeView)
createGesture()
}
func createGesture() {
let showReg = UISwipeGestureRecognizer(target: self, action: #selector(showRegister))
showReg.direction = .left
self.swipeView.addGestureRecognizer(showReg)
}
func showRegister(gesture: UISwipeGestureRecognizer) {
performSegue(withIdentifier: "showRegister", sender: self)
}
}
То есть контроллер для фактического UIViewController
(конкретной страницы, что отображается)
Теперь иву также пытался возиться с какой-то логикой в моих TutorialViewController
, которая является UIPageViewController
управления пойлом формирует страницу страница и т.д.
Logic, что здесь
class TutorialViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
var viewControllerIndex: Int?
//Array of my pages to load (GrowController is page3)
lazy var tutorialArray: [UIViewController] = {
return [self.tutorialInstance(name: "page1"), self.tutorialInstance(name: "page2"), self.tutorialInstance(name: "page3")]
}()
private func tutorialInstance(name: String?) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: name!)
}
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
self.delegate = self
if let firstViewController = tutorialArray.first {
setViewControllers([firstViewController], direction: .forward, animated: false, completion: nil)
}
}
// Scroll view
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for view in self.view.subviews {
if view is UIScrollView {
view.frame = UIScreen.main.bounds
}
else if view is UIPageControl {
view.backgroundColor = UIColor.clear
}
}
}
// Page View Controller delegate functions
public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = tutorialArray.index(of: viewController) else {
return nil
}
let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else {
return nil
}
guard tutorialArray.count > previousIndex else {
// Added this line just testing around, nothing happened here though.
performSegue(withIdentifier: "ShowRegister", sender: self)
return nil
}
return tutorialArray[previousIndex]
}
public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = tutorialArray.index(of: viewController) else {
return nil
}
let nextIndex = viewControllerIndex + 1
guard nextIndex < tutorialArray.count else {
return nil
}
guard tutorialArray.count > nextIndex else {
return nil
}
return tutorialArray[nextIndex]
}
public func presentationCount(for pageViewController: UIPageViewController) -> Int {
return tutorialArray.count
}
public func presentationIndex(for pageViewController: UIPageViewController) -> Int {
guard let firstViewController = viewControllers?.first, let firstViewControllerIndex = tutorialArray.index(of: firstViewController) else {
return 0
}
return firstViewControllerIndex
}
}
ли это иметь someth связанный с методом делегатов willTransitionTo
pageView
? Я не знаю, как это реализовать, я пробовал.
Я думал, что могу просто добавить subView в контроллер Grow, поместить в него жест жестов и выполнить segue всякий раз, когда пользователь удаляется с этой страницы. На данный момент этот код вызывает сбой при загрузке страницы 3 (GrowController
)
Любая помощь ВЕЛИКОЕ оценили, я пытался понять это уже более недели, и это второй вопрос по теме i ' я поставил. Благодаря!
Позвольте мне просто проверить, что я понимаю, что вы хотите делать. Вы хотите, чтобы пользователь имел возможность прокручивать салфетки, чтобы пройти через три страницы контроллера просмотра страницы, а затем, если пользователь снова замахнется, мы отходим прямо отсюда? Это верно? – matt
Точно! за исключением того, что он начинается на первой странице, а его просто салфетки, а затем третий салфетка со страницы 3 выйдет! но да, это точная концепция – Dan
Правильно ли привязаны segues от GrowController до следующего контроллера? (через раскадровку или программно). Кроме того, вы можете публиковать фактические журналы ошибок, которые вы получаете. –