arrays - UIPageControl 未正确更新为 UIPageViewController 中当前页面的索引

标签 arrays swift uipageviewcontroller indexof uipagecontrol

我有一个以编程方式内置的带有 PageControl 的 UIPageViewController。我有一个跟踪可以分页的 View Controller 的数组,我试图让 PageControl 显示与当前 View Controller 相关的点页面。

我有以下用于向后和向前分页的代码:

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

    guard let vcIndex = viewControllerList.index(of: viewController) else {
        return nil
    }

    let previousIndex = vcIndex - 1

    guard previousIndex >= 0 else {return nil}

    guard viewControllerList.count > previousIndex else {return nil}


    self.pageControl.currentPage = previousIndex

    return viewControllerList[previousIndex]

}

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

    guard let vcIndex = viewControllerList.index(of: viewController) else {return nil}

    let nextIndex = vcIndex + 1



    guard viewControllerList.count != nextIndex else {return nil}

    guard viewControllerList.count > nextIndex else {return nil}


    self.pageControl.currentPage = nextIndex

    return viewControllerList[nextIndex]

}

当我将 PageControl 的当前页面设置为 nextIndex 或 previousIndex 时,我相信它应该为正在显示的当前 View Controller 的页面显示正确的点,但是它经常错过中间索引(总共三个点).它通常只是在第 1 个和第 3 个点之间来回移动,并且不准确。

如果有更好的方法,我也会接受其他答案。

最佳答案

是因为你把pageControl的当前索引设置错了。您必须将其设置为:

func pageViewController(UIPageViewController, willTransitionTo: [UIViewController]) 在手势驱动的转换开始之前调用。

func pageViewController(UIPageViewController, didFinishAnimating: Bool, previousViewControllers: [UIViewController], transitionCompleted: Bool) 在手势驱动的转换完成后调用。 这两个方法都来自 UIPageViewControllerDelegate

关于arrays - UIPageControl 未正确更新为 UIPageViewController 中当前页面的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069297/

相关文章:

Xcode XIB : how to implement a ScrollView or PageControl to swipe sub-views?

javascript - 数组 javascript indexOf

swift - 如何使用 Xcode 7 使用 Swift 代码将 Button 放入 SpriteKit 中?

ios - 带有页面 View Controller 的 removeFromSuperView

swift - Swift 5 编译器有时不调用子类中的委托(delegate)方法

swift - 没有参数的可选完成处理程序

iOS swift : UIPageViewController - Turning page programmatically

java - 如何确定算术表达式中第一个冗余括号的索引?

ruby - 检查数组是否已经排序?

php - 从 PHP 中的键列表创建新数组