Я создал 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
}