错误:页面控制跳转两次单页交换
Posted
技术标签:
【中文标题】错误:页面控制跳转两次单页交换【英文标题】:Error: Page Control jump twice with single page swap 【发布时间】:2016-02-16 19:24:41 【问题描述】:使用以下代码,页面控件在单页交换期间跳转了两次而不是一次。我需要将UIPageViewController
添加为子视图,如下所示,如何使页面控件正确运行?谢谢!
import UIKit
class ViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate
var pageViewController: UIPageViewController!
let pagesArray = ["Page1ViewController", "Page2ViewController","Page3ViewController"]
let pageControl : UIPageControl = UIPageControl(frame: CGRectMake(100, 600, 200, 20))
func viewControllerAtIndex(index: Int) -> UIViewController?
let vc = storyboard?.instantiateViewControllerWithIdentifier (pagesArray[index])
return vc
func pageViewController(pageViewController:UIPageViewController,
viewControllerBeforeViewController
viewController: UIViewController) -> UIViewController?
if var index = pagesArray.indexOf(viewController.restorationIdentifier!)
if index > 0
index--
self.pageControl.currentPage = index
return viewControllerAtIndex(index)
return nil
func pageViewController(pageViewController:UIPageViewController,
viewControllerAfterViewController
viewController: UIViewController) -> UIViewController?
if var index = pagesArray.indexOf(viewController.restorationIdentifier!)
if index < pagesArray.count - 1
index++
return viewControllerAtIndex(index)
return nil
override func viewDidLoad()
super.viewDidLoad()
pageControl.numberOfPages = 3
pageControl.currentPage = 0
pageControl.tintColor = UIColor.redColor()
pageControl.pageIndicatorTintColor = UIColor.blackColor()
pageControl.currentPageIndicatorTintColor = UIColor.orangeColor()
if let vc = storyboard?.instantiateViewControllerWithIdentifier("MyPageViewController")
self.addChildViewController(vc)
self.view.addSubview(vc.view)
self.view.addSubview(pageControl)
pageViewController = vc as! UIPageViewController
pageViewController.dataSource = self
pageViewController.delegate = self
pageViewController.setViewControllers([viewControllerAtIndex(0)!], direction: .Forward, animated: true, completion: nil)
pageViewController.didMoveToParentViewController(self)
【问题讨论】:
如果故事板上有页面视图控制器,为什么要在另一个视图控制器中实例化它? 因为我稍后会进行登录检查,如果用户没有登录,根视图控制器会将他带到定向页面(UIPageViewController)。如果用户已经登录,根视图控制器应该将他带到主内容页面。 我希望页面控件(那些点指示器)位于所有内容之上。所以我用 addSubView 的方式做页面。 【参考方案1】:试试这个
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
let identifier = viewController.restorationIdentifier
self.index = self.identifiers.indexOfObject(identifier!)
if index == identifiers.count - 1
return nil
//increment the index to get the viewController before the current one
self.index = self.index + 1
return self.viewControllerAtIndex(self.index)
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
let identifier = viewController.restorationIdentifier
self.index = self.identifiers.indexOfObject(identifier!)
if index == 0
return nil
//decrement the index to get the viewController before the current one
self.index = self.index - 1
return self.viewControllerAtIndex(self.index)
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int
return self.identifiers.count
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int
return 0
【讨论】:
谢谢你,我试过了。我需要先在某处声明“self.index”和“self.identifier”吗?在函数中无法识别它们。 @AAC 是的 self.identifiers 将是您的标识符数组,在您的情况下它将是 self.pagesArray @AAC 并且不需要全局声明索引。我创建了全局变量来跟踪我当前的索引。在您的代码中,您使用了索引的本地声明。 对不起。那么在索引值更改后我应该把'pageControl.currentPage=index'放在哪里?我已经放入了“viewControllerAfterViewController”和“viewControllerBeforeViewController”功能。这使得页面指示器(pageControl)中突出显示的点在我只滑动一次页面时跳转了两次。这是我面临的问题。感谢您的帮助! 或者我是否应该尝试检测页面滑动完成或成功,然后更改'pageControl.currentPage'的值?以上是关于错误:页面控制跳转两次单页交换的主要内容,如果未能解决你的问题,请参考以下文章