Skip to main content
 首页 » 操作系统

ios之使用 Swift 的 UIPageViewControllerDataSource 问题

2024年01月01日47pander-it

UIPageViewControllerDataSource 委托(delegate)有两个必需的方法:viewControllerBeforeViewController 和 viewControllerAfterViewController。

我遇到了一个问题。这是我正在使用的代码。

func pageViewController(pageViewController: UIPageViewController, 
    viewControllerBeforeViewController ProView: UIViewController) -> UIViewController? { 
    // ... 
    print("You swiped BACK") 
    return: nil 
} 

和

func pageViewController(pageViewController: UIPageViewController, 
    viewControllerAfterViewController ProView: UIViewController) -> UIViewController? {   
        ... 
        println("You swiped FORWARD") 
 
        return nil 
} 

以下是重现问题的步骤:

  • 我向右滑动
  • 控制台的输出是

You swiped BACK
You swiped FORWARD

当我向左滑动时也会发生这种情况。为什么控制台同时打印它们而不是只打印一个?

请您参考如下方法:

发生这种情况是因为这两个函数都在转换时被调用,因为所有 3 个(上一个、当前和下一个) View Controller 都被实例化了。因此,当您转换到 View Controller 2 时,将实例化 View Controller 1 和 3。

func pageViewController(pageViewController: UIPageViewController, 
viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? 
 
func pageViewController(_ pageViewController: UIPageViewController, 
 viewControllerAfterViewController viewController: UIViewController) -> UIViewController? 

这些函数不指示用户滑动的方向,而是指示下一个和上一个 View Controller

要实现滑动,您需要实现 UIPageViewControllerDelegate 及其 pageViewController:willTransitionToViewControllers: 或 pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted: 函数或添加UIPageViewController 的手势识别器的观察者