swift 中的 UIPageViewController 向前和向后滚动时,索引未打印正确
UIPageViewController in swift while Scrolling forward and backward, Index is not printing Correct
这里我在Swift中编写了UIPageViewController。这是工作。但是当我 swipe/scroll 向前或向后翻页时,索引打印不正确。所需页面正确打开。但是,此页面的索引值未在控制台中正确打印。此外,有时在页面正确打开时它不会在滚动时打印索引。请帮助我如何在滚动时获得正确的页面索引。代码如下.....
var pageViewController: UIPageViewController!
let pages = ["TabOneVc","TwoVC","ThreeVc","FourVc"]
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{
if let index = pages.indexOf(viewController.restorationIdentifier!){
if index > 0{
print(index)
return viewcontrollerAtIndex(index - 1)
}
}
return nil
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
{
if let index = pages.indexOf(viewController.restorationIdentifier!){
if index < pages.count - 1{
print(index)
return viewcontrollerAtIndex(index + 1)
}
}
return nil
}
func viewcontrollerAtIndex(index: Int) -> UIViewController?
{
let vc = storyboard?.instantiateViewControllerWithIdentifier(pages[index])
print("index path",index)
return vc
}
(当你滑动并登陆一个视图控制器时,它也会加载下一个视图控制器,所以它已经准备好了,因此这将再次调用 viewControllerAtIndex 并打印你当前所在的下一个索引,导致错误索引的问题。)
实现当前索引的正确方法是实现这个委托方法:
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool){
检查 transitionCompleted
是否为真(当页面完全更改时),然后使用它根据您当前的代码获取当前索引:
let viewController = pageViewController.viewControllers![0] as! ViewController
let index = pages.indexOf(viewController.restorationIdentifier!)
这会获取 pageViewController 数组中的第一个视图控制器,并使用您当前的代码从 restortationIdentifier 获取其索引。
希望对您有所帮助。
这里我在Swift中编写了UIPageViewController。这是工作。但是当我 swipe/scroll 向前或向后翻页时,索引打印不正确。所需页面正确打开。但是,此页面的索引值未在控制台中正确打印。此外,有时在页面正确打开时它不会在滚动时打印索引。请帮助我如何在滚动时获得正确的页面索引。代码如下.....
var pageViewController: UIPageViewController!
let pages = ["TabOneVc","TwoVC","ThreeVc","FourVc"]
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{
if let index = pages.indexOf(viewController.restorationIdentifier!){
if index > 0{
print(index)
return viewcontrollerAtIndex(index - 1)
}
}
return nil
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
{
if let index = pages.indexOf(viewController.restorationIdentifier!){
if index < pages.count - 1{
print(index)
return viewcontrollerAtIndex(index + 1)
}
}
return nil
}
func viewcontrollerAtIndex(index: Int) -> UIViewController?
{
let vc = storyboard?.instantiateViewControllerWithIdentifier(pages[index])
print("index path",index)
return vc
}
(当你滑动并登陆一个视图控制器时,它也会加载下一个视图控制器,所以它已经准备好了,因此这将再次调用 viewControllerAtIndex 并打印你当前所在的下一个索引,导致错误索引的问题。)
实现当前索引的正确方法是实现这个委托方法:
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool){
检查 transitionCompleted
是否为真(当页面完全更改时),然后使用它根据您当前的代码获取当前索引:
let viewController = pageViewController.viewControllers![0] as! ViewController
let index = pages.indexOf(viewController.restorationIdentifier!)
这会获取 pageViewController 数组中的第一个视图控制器,并使用您当前的代码从 restortationIdentifier 获取其索引。
希望对您有所帮助。