【发布时间】:2021-03-19 08:46:17
【问题描述】:
在我的项目中,我有一个 UIPageViewController,用户可以向它添加新页面(它从一页开始)。每次用户添加新页面时,UIPageViewController 必须显示当前页面(用户必须在最后一页,以便他/她可以添加新页面)。添加第二页后一切正常,但是当用户在 page2 并添加第三页并向前滚动时,UIPageViewController 显示第一页而不是显示第三页(出于某种原因,我不知道,如果用户向后滚动一切正常和 UIPageViewController 显示 page1)。
这是我添加新页面的代码:
class HomePageVC: UIPageViewController {
private var pages = [SomeVC]()
private var currentSomeVC: SomeVC!
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .clear
dataSource = self
delegate = self
let someVC = SomeVC()
pages.append(someVC)
if pages.count != 0 {
currentSomeVC = pages[0]
setViewControllers(pages, direction: .forward, animated: true, completion: nil)
}
if pages.count == 1 {
delegate = nil
dataSource = nil
}
}
func addNewPage() {
let someVC = SomeVC()
pages.append(someVC)
if delegate == nil, dataSource == nil {
delegate = self
dataSource = self
}
}
}
extension HomePageVC: UIPageViewControllerDelegate, UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = pages.firstIndex(of: viewController as! SomeVC) else {
return nil
}
let previousIndex = viewControllerIndex - 1
guard previousIndex >= 0 else {
return pages.last
}
guard pages.count > previousIndex else {
return nil
}
return pages[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = pages.firstIndex(of: viewController as! SomeVC) else {
return nil
}
let nextIndex = viewControllerIndex + 1
guard pages.count != nextIndex else {
return pages.first
}
guard pages.count > nextIndex else {
return nil
}
return pages[nextIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if completed {
guard let viewControllerIndex = pages.firstIndex(of: pageViewController.viewControllers?.first as! SomeVC), let viewController = pageViewController.viewControllers?.first as? SomeVC else {
return
}
currentSomeVC = viewController
}
}
}
【问题讨论】:
标签: swift uipageviewcontroller