2017-02-15 2 views
0

J'ai un contrôle de page dans mon projet et je veux faire deux choses: 1. Je veux cacher les points de l'indicateur dans la dernière page Page 2. Je veux verrouiller la dernière page dans la (page VC (ma classe)) que je ne peux pas revenir à la première page ici est mon codepage voir contrôleur masquer les points et arrêter dans la dernière page (ne peut pas revenir)

class pageVC : UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate { 

lazy var VCArr : [UIViewController] = { 
    return [self.VCInstance(name : "FirtsVC"), 
      self.VCInstance(name : "SecondVC"), 
      self.VCInstance(name :"ThirdVC"), 
      self.VCInstance(name :"FourthVC"), 
      self.VCInstance(name :"FivethVC")] 
}() 

private func VCInstance(name : String) -> UIViewController { 
    return UIStoryboard(name : "Main" , bundle : nil).instantiateViewController(withIdentifier: name) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.dataSource = self 
    self.delegate = self 

    if VCArr.last != nil { 
     print("first Page Reached!") 
    } 

    if let firstVC = VCArr.first { 
     setViewControllers([firstVC] , direction: .forward , animated: true, completion: nil) 
    } 
} 

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    let pageVC = UIPageControl() 

    for view in self.view.subviews { 
     if view is UIScrollView { 
      view.frame = UIScreen.main.bounds 
     }else if view is UIPageControl{ 
      view.backgroundColor = UIColor.clear 
      pageVC.numberOfPages = 5 
      pageVC.center = self.view.center 
      pageVC.layer.position.y = self.view.frame.height - 180 ; 
     } 
    } 
} 

public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?{ 
    guard let viewControllerIndex = VCArr.index(of: viewController) else { 
     return nil 
    } 

    let previousIndex = viewControllerIndex-1 
    guard previousIndex >= 0 else { 
     return VCArr.last 
    } 

    guard VCArr.count > previousIndex else { 
     return nil 
    } 

    return VCArr[previousIndex] 
} 


public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?{ 
    guard let viewControllerIndex = VCArr.index(of: viewController) else { 
     return nil 
    } 

    let nextIndex = viewControllerIndex+1 
    guard nextIndex < VCArr.count 
     else { 
     return VCArr.first 
    } 

    guard VCArr.count > nextIndex else { 
     return nil 
    } 
    return VCArr[nextIndex] 
} 


public func presentationCount(for pageViewController: UIPageViewController) -> Int{ 
    return VCArr.count 
} 

public func presentationIndex(for pageViewController: UIPageViewController) -> Int{ 
    guard let firstViewController = viewControllers?.first , let firstViewControllerIndex = VCArr.index(of: firstViewController) else { 
     return 0 
    } 

    return firstViewControllerIndex 
} 
public func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { 
    if (VCArr.last!.isViewLoaded) 
    { 
     print("It is Done!!!") 
    } 
    } 

Répondre

0

ce changement, qui fait l'affichage de page pour retourner au premier quand il est dans le dernier:

let nextIndex = viewControllerIndex+1 
guard nextIndex < VCArr.count 
    else { 
    return nil //was VCArr.first 
} 

Et pour le rendre caché, d'abord déplacer le let pageVC = UIPageControl() ci-dessous le class pageVC : UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate { pour le rendre public au sein de la classe. Puis ajoutez:

if nextIndex == VCArr.count{ 
    pageVC.isHidden = true 
} 
+0

Si je supprime cette méthode que vous avez dit que je recevrai Erreur –

+0

Je vois. Ensuite, ne le supprimez pas, remplacez "retrn VCArr.firsr" par "retrn nil". Je vais éditer ma réponse –

+0

Ok Cela a été fait mais Maintenant Juste à la dernière page Il sera Stop et Dans la Première page, vous pouvez revenir en arrière et aller à la dernière page! Et les points indicateurs sont encore apparents! –