使用 Swift 的 UIPageViewControllerDataSource 问题
Issue with UIPageViewControllerDataSource using Swift
UIPageViewControllerDataSource
委托有两个必需的方法: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 个(上一个、当前和下一个)视图控制器都被实例化了。因此,当您转换到视图控制器 2 时,将实例化视图控制器 1 和 3。
func pageViewController(pageViewController: UIPageViewController,
viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
这些函数不指示用户滑动的方向,而是指示下一个和上一个视图控制器
要实现滑动,您需要实现 UIPageViewControllerDelegate
及其 pageViewController:willTransitionToViewControllers:
或 pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:
函数,或者向 UIPageViewController
的手势识别器添加观察者
UIPageViewControllerDataSource
委托有两个必需的方法: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 个(上一个、当前和下一个)视图控制器都被实例化了。因此,当您转换到视图控制器 2 时,将实例化视图控制器 1 和 3。
func pageViewController(pageViewController: UIPageViewController,
viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
这些函数不指示用户滑动的方向,而是指示下一个和上一个视图控制器
要实现滑动,您需要实现 UIPageViewControllerDelegate
及其 pageViewController:willTransitionToViewControllers:
或 pageViewController:didFinishAnimating:previousViewControllers:transitionCompleted:
函数,或者向 UIPageViewController
的手势识别器添加观察者