2016-03-23 8 views
0

Hier habe ich den UIPageViewController in Swift programmiert. Es funktioniert. Aber wenn ich die Seite vorwärts oder rückwärts wische/scrolle, wird der Index nicht korrekt gedruckt. Die gewünschte Seite wird korrekt geöffnet. Der Wert des Index dieser Seite wird jedoch nicht korrekt in der Konsole gedruckt. Außerdem wird der Index beim Scrollen manchmal nicht gedruckt, während die Seite korrekt geöffnet wird. Bitte helfen Sie mir, wie ich beim Scrollen den richtigen Index für die Seite bekommen kann. Der Code ist unten angegeben .....UIPageViewController in Swift während Scrollen vorwärts und rückwärts, Index wird nicht korrekt

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 
} 

Antwort

0

(Wenn Sie durch und landen auf einem View-Controller-Swipe wird es auch den nächsten View-Controller geladen werden, so dass es bereit ist, und dies wird viewControllerAtIndex daher erneut aufrufen und drucken die . nächster Index von dem Sie sich gerade befinden, wodurch das Problem des falschen Index)

der richtige Weg, um den aktuellen Index zu erreichen, ist diesen Delegatmethode zu implementieren:

func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool){

überprüfen Sie, ob transitionCompleted gilt (für, wenn eine Seite voll geändert hat), und dies dann der aktuelle Index Ihrer aktuellen Code basiert bekommen verwenden aus:

let viewController = pageViewController.viewControllers![0] as! ViewController let index = pages.indexOf(viewController.restorationIdentifier!)

Dies wird die erste View-Controller in der pageViewController Array und verwendet Ihre aktuelle Code, um seinen Index von restortationIdentifier zu erhalten.

Hoffe, das hilft.

+0

Danke Joe Benton .. Ich habe die Lösung von diesem .. es hat mir geholfen ... –