如何禁用ViewControllers的inifinite循环?

我在网上find了这个代码并进行了testing。 它的工作,但它在无限循环。 我看到一些关于创build页面索引的新funcpost。

链接到网站我find了代码: http : //samwize.com/2015/10/13/how-to-create-uipageviewcontroller-in-storyboard-in-container-view/

任何人愿意编辑代码,以便循环结束?

 import UIKit class MyPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { var pages = [UIViewController]() override func viewDidLoad() { super.viewDidLoad() self.delegate = self self.dataSource = self let page1: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page1") let page2: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page2") let page3: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page3") pages.append(page1) pages.append(page2) pages.append(page3) setViewControllers([page2], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) } func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { let currentIndex = pages.indexOf(viewController)! let previousIndex = abs((currentIndex - 1) % pages.count) return pages[previousIndex] } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { let currentIndex = pages.indexOf(viewController)! let nextIndex = abs((currentIndex + 1) % pages.count) return pages[nextIndex] } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

页面视图控制器不应该包装。

你的viewControllerBeforeViewControllerviewControllerAfterViewController方法都是从第一个到最后一个或最后一个到第一个,这是错误的。

只要重写viewControllerBeforeViewController来减lesscurrentIndex ,并返回该视图控制器,除非它<0。 如果它<0,则返回零。

同样,对于viewControllerAfterViewController ,递增currentIndex ,如果它是< pages.count ,则返回该项目,否则为零。

看看你是否可以写这个代码。

Swift 3.0

 var pages = [UIViewController]() extension ViewController: UIPageViewControllerDataSource { func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { let currentIndex = pages.index(of: viewController)! let previousIndex = currentIndex - 1 return (previousIndex == -1) ? nil : pages[previousIndex] } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { let currentIndex = pages.index(of: viewController)! let nextIndex = currentIndex + 1 return (nextIndex == pages.count) ? nil : pages[nextIndex] } } 
 import UIKit 

类MyPageViewController:UIPageViewController,UIPageViewControllerDataSource,UIPageViewControllerDelegate {

 var pages = [UIViewController]() override func viewDidLoad() { super.viewDidLoad() self.delegate = self self.dataSource = self let page1: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page1") let page2: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page2") let page3: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page3") pages.append(page1) pages.append(page2) pages.append(page3) setViewControllers([page2], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) } func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { let currentIndex = pages.indexOf(viewController)! let previousIndex = abs((currentIndex - 1) % pages.count) if (previousIndex > 0) { return nil } return pages[previousIndex] } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { let currentIndex = pages.indexOf(viewController)! let nextIndex = abs((currentIndex + 1) % pages.count) if (nextIndex < 1) { return nil } return pages[nextIndex] } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } 

}