Есть ли способ переопределить методы viewControllerBefore / After в UIPageViewControllerDataSource, чтобы избежать повторения кода? - PullRequest
0 голосов
/ 05 мая 2020

Я создал несколько PageViewController во всем приложении, и все они требуют одной и той же конфигурации, поэтому мне было интересно, есть ли способ переопределить методы или сделать это более чистым способом.

Прямо сейчас , для каждого из четырех созданных мною у меня есть следующий код установки. Единственная переменная - это массив viewControllers (который объявлен в классе PageViewController), иначе этот код придется повторять 4 раза.

extension ThemeSelector: UIPageViewControllerDataSource {

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
    guard let currentIndex = themes.firstIndex(of: viewController) else { return nil }

    // This is used to prevent the pageViewController from trying to instantiate a vc before that doesn't exist.
    if currentIndex > 0 { return themes[currentIndex - 1] }
    else { return nil }
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    guard let currentIndex = themes.firstIndex(of: viewController) else { return nil }

    // This is used to prevent the pageViewController from trying to instantiate a vc after that doesn't exist.
    if currentIndex < themes.count - 1 { return themes[currentIndex + 1] }
    else { return nil}
}


// MARK: Pagination Dots
func presentationCount(for _: UIPageViewController) -> Int {
    return themes.count
}

func presentationIndex(for _: UIPageViewController) -> Int {
    guard let firstViewController = viewControllers?.first,
        let firstViewControllerIndex = themes.firstIndex(of: firstViewController) else {
            return 0
    }
    return firstViewControllerIndex
}

}

Заранее спасибо.

1 Ответ

2 голосов
/ 05 мая 2020

Вы можете создать BasePageViewController с помощью этого установочного кода и наследовать.

...