UIPageViewController - 不符合协议

Posted

技术标签:

【中文标题】UIPageViewController - 不符合协议【英文标题】:UIPageViewController - Does not conform to protocol 【发布时间】:2016-11-24 22:18:55 【问题描述】:

我正在尝试实现 UIPageViewController,但出现以下错误:我的代码如下

import UIKit

class ShopViewController: UIPageViewController, UIPageViewControllerDataSource 

  override func viewDidLoad() 
    super.viewDidLoad()
    

  override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    

这给了我一个错误消息:ShopViewController 不符合协议 UIPageViewControllerDataSource。

所以我发现另一个线程建议我添加以下功能:

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

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

这样做之后,我的代码现在是:

class ShopViewController: UIPageViewController, UIPageViewControllerDataSource 

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

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

   override func viewDidLoad() 
    super.viewDidLoad()

   

   override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
   
  

但我仍然收到一个错误,在我添加了 2 个新函数的函数声明主体中显示相同的 + 预期 。

有人可以帮忙吗?

【问题讨论】:

你所做的只是定义一些出现在协议中的函数。您实际上需要添加那些执行您想要的功能的实现。 IE。添加代码以适当地返回下一个/上一个视图控制器 【参考方案1】:

您需要像这样使用它,因为您正在使用UIPageViewController,并且您没有实现UIPageViewController 的委托方法viewControllerAfterviewControllerBefore,这就是您收到此错误的原因。

class ShopViewController: UIPageViewController, UIPageViewControllerDataSource 

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? 
        // Returns the view controller after the given view controller.
        return self
    

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? 
        // Returns the view controller before the given view controller.

        return self
    

    override func viewDidLoad() 
        super.viewDidLoad()

    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
    

【讨论】:

以上是关于UIPageViewController - 不符合协议的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController - 不符合协议

UIPageViewController 方向只向前

UIPageViewController 和 UIScrollView

NavigationController 中的 UIPageViewController

如何删除 UIPageViewController 中的 previousViewControllers

UIPageViewController -presentationCount 不触发