2017-02-15 11 views
0

私は自分のプロジェクトにページコントロールを持っています。私は2つのことをしたい: 1.最後にインジケータードットを隠したいページ 私は私が最初のページここ に戻って来ることができない(ページVC(私のクラス))の最後のページをロックする2.作ってページビューコントローラーインジケータードットを非表示にして最後のページで停止する(戻ることはできません)

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!!!") 
    } 
    } 

答えて

0

変更これを、私のコードです最後のページビューにあるときに最初のページビューに戻るページビュー:

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

それを非表示にするには、先にlet pageVC = UIPageControl()class pageVC : UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate {の下に移動して、クラス内で公開させます。次に、追加してください:

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

もし私がエラー –

+0

が表示されると言ったそのメソッドを削除します。削除しないで、 "retrn VCArr.firsr"を "retrn nil"に置き換えてみてください。私は私の答えを編集します –

+0

それは完了しましたが、最後のページで今すぐそれは停止し、最初のページでは、スクロールして最後のページに行くことができます! インジケータの点がまだ表示されています! –

関連する問題