PageViewController Отключено после нажатия кнопки с переходом - Swift 4 - PullRequest
0 голосов
/ 08 октября 2018

Я успешно реализовал PageViewController, где я могу пролистывать между пятью страницами (ViewControllers).Проблема в том, когда я добавляю кнопку, которая переходит на один из ViewControllers.Он показывает страницу, как и положено, но я застрял на этой странице.PageViewController больше не работает.Я не могу больше пролистывать страницы.

import UIKit

class PageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

    lazy var subViewControllers:[UIViewController] = {
        return [
            UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController1") as! ViewController1,
            UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController2") as! ViewController2,
            UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController3") as! ViewController3,
            UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController4") as! ViewController4,
            UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController5") as! ViewController5,
        ]
    }()

    override func viewDidLoad() {
    super.viewDidLoad()

        self.delegate = self
        self.dataSource = self

        setViewControllers([subViewControllers[0]], direction: .forward, animated: true, completion: nil)
    }

// MARK - UIPageViewControllerDataSource

    func presentationCount(for pageViewController: UIPageViewController) -> Int {
        return subViewControllers.count
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let currentIndex:Int = subViewControllers.index(of: viewController) ?? 0
        if(currentIndex <= 0) {
            return nil
        }
        return subViewControllers[currentIndex-1]
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let currentIndex:Int = subViewControllers.index(of: viewController) ?? 0
        if(currentIndex >= subViewControllers.count-1) {
            return nil
        }
        return subViewControllers[currentIndex+1]
   }
}

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете передать ссылку вашего PageViewController на ваши контроллеры вспомогательного представления, чтобы вы могли вызвать метод вашего PageViewController с контроллеров вспомогательного представления.Например, создайте

var pageViewController : PageViewController?

в ViewController4, затем назначьте его в subViewControllers

lazy var subViewControllers:[UIViewController] = {
    let viewController4 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController4") as! ViewController4
    viewController4.pageViewController = self
    return [
        UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController1") as! ViewController1,
        UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController2") as! ViewController2,
        UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController3") as! ViewController3,
        viewController4,
        UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController5") as! ViewController5,
    ]
}()

Затем можно вызвать любой метод PageViewController из ViewController4.Для простоты вы можете создать метод scrollToViewController3() в PageViewController

func scrollToViewController3()
{
    setViewControllers([subViewControllers[2]], direction: .reverse, animated: true, completion: nil)
}

и вызвать pageViewController?.scrollToViewController3() в ViewController4

...