如何禁用ViewControllers的inifinite循环?
我在网上find了这个代码并进行了testing。 它的工作,但它在无限循环。 我看到一些关于创build页面索引的新func
post。
链接到网站我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. } }
页面视图控制器不应该包装。
你的viewControllerBeforeViewController
和viewControllerAfterViewController
方法都是从第一个到最后一个或最后一个到第一个,这是错误的。
只要重写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. }
}
- dequeueReusableCellWithIdentifier总是返回nil(不使用storyboard)
- 出示几个模态视图控制器后如何回到Tabbar控制器
- 蜂窝数据的iOS网页错误,但不是通过Wifi? AT&T蜂窝networking最近的变化?
- iOS 7只在一些时间使用自定义交互式转换
- select器视图iPhone的JSON数组
- AFNetworking 3.0 AFHTTPSessionManager使用NSOperation
- 我不完全是第一个iOS应用程序,关于狗
- 启动使用Simperium的应用程序时,objectFromJSONString崩溃
- 我怎样才能添加文件到项目在Xcode 9?