Многоразовые ViewControllers UIPageViewController и количество страниц? - PullRequest
0 голосов
/ 08 апреля 2019

Я создал UIPageViewController, который по большей части будет содержать несколько экземпляров одного и того же класса UIViewController.Чтобы сохранить память, когда пользователь проводит пальцем, я попытался реализовать версию этого многоразового ViewControllers , как показано ниже.

Reusabel Pages

var pages:[TestViewController] = [TestViewController](){
    didSet{
        print("Pages count: \(pages.count)")
    }
}

private func unusedViewController() -> TestViewController {
    let unusedViewControllers = pages.filter { $0.parent == nil }
    if let someUnusedViewController = unusedViewControllers.first {
        return someUnusedViewController
    } else {
        let newViewController = TestViewController()
        pages.append(newViewController)
        return newViewController
    }
}

По большей части это работает нормально, независимо от того, сколько страниц я создаю, всегда есть только 3 ViewController, существующих в массиве pages.У меня возникли трудности с поиском текущего индекса текущего номера страницы, на котором находится пользователь.Это затрудняет ограничение количества страниц, а также определяет, в каком направлении пролистал пользователь.Ниже моя реализация источника данных, хотя он не совсем работает, как я надеялся.Спасибо за вашу помощь

UIPageViewControllerDataSource

var index = 0

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {


    if index == 0{
        return nil
    }
    index -= 1

    let vc = unusedViewController()
    vc.view.backgroundColor = .gray
    vc.index = index
    vc.label.text = String(index)
    return vc
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

    if index >= 5{
        return nil
    }
    index += 1
    let vc = unusedViewController()


    vc.view.backgroundColor = .blue

    vc.index = index
    vc.label.text = String(index)

    return vc
} 
...