2016-11-24 116 views
-1

我想實現一個UIPageViewController和我收到以下錯誤:我的代碼如下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個新函數。

任何人都可以幫忙嗎?

+0

您所做的一切都是定義協議中出現的一些函數。你實際上需要添加那些你想做的功能的*實現*。 IE瀏覽器。添加代碼以返回相應的下一個/上一個視圖控制器 – Paulw11

+0

好的,謝謝! –

回答

1

你需要使用這樣的,因爲你正在使用UIPageViewController,你是不執行委託方法viewControllerAfterUIPageViewController這就是爲什麼你收到此錯誤viewControllerBefore

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() 
    } 
}