Hide dots on final page of UIPageViewController swift

后端 未结 5 1551
小鲜肉
小鲜肉 2021-01-16 08:59

I have four pages in a UIPageViewController, and I\'d like to hide the dots on the last page. I successfully made a function that gets called on the last page of the UIPageV

5条回答
  •  无人及你
    2021-01-16 09:44

    here is the complete code of UIPageViewController to hide dots from last page it's work fine

    first create class for UIViewController and add UIPageViewControllerDelegate , UIPageViewControllerDataSource

    create outlet for pageControl

    @IBOutlet weak var pageControl: UIPageControl!

    create variable for uipagecontroller

    var pageControllerContainer : UIPageViewController!
    
    var pages = [UIViewController]()
    
    var currentIndex : Int?
    
    private var pendingIndex : Int?
    private var lastIndex : Int?
    

    in ViewDidLoad: add following lines :

     let page1 : UIViewController! = self.storyboard?.instantiateViewController(withIdentifier: "YourFirstPageViewController") as! YourFirstPageViewController
        let page2 : UIViewController! = self.storyboard?.instantiateViewController(withIdentifier: "YourSecondPageViewController") as! YourSecondPageViewController
        let page3 : UIViewController! = self.storyboard?.instantiateViewController(withIdentifier: "YourThirdPageViewController") as! YourThirdPageViewController
    
        pages.append(page1)
        pages.append(page2)
        pages.append(page3)
    
        pageControllerContainer = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
        pageControllerContainer.delegate = self
        pageControllerContainer.dataSource = self
        pageControllerContainer.setViewControllers([page1], direction: .forward, animated: true, completion: nil)
    
        view.addSubview(pageControllerContainer.view)
        view.bringSubview(toFront: pageControl)
        pageControl.numberOfPages = pages.count
        pageControl.currentPage = 0
    

    now create following delegates method for pageviewcontroller:

         func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
    
        let currentIndex = pages.index(of: viewController)
    
        if currentIndex == 0
        {
            return nil
        }
        let previousIndex = abs((currentIndex! - 1) % pages.count)
        return pages[previousIndex]
    }
    
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    
    
        let currentIndex = pages.index(of: viewController)
    
        if currentIndex == pages.count - 1
        {
            return nil
        }
    
        let nextIndex = abs((currentIndex! + 1 ) % pages.count)
        return pages[nextIndex]
    }
    

    after that create following datasource methods

        func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
    
        pendingIndex = pages.index(of: pendingViewControllers.first!)
    
    }
    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    
        if completed
        {
    
            currentIndex = pendingIndex
            if let index = currentIndex
            {
                pageControl.currentPage = index
            }
        }
         lastIndex = pages.count - 1
          print(lastIndex as Any)
          print(currentIndex as Any)
    
        if currentIndex == lastIndex
        {
            pageControl.isHidden = true
        }
        else
        {
            pageControl.isHidden = false
        }
    }
    

    this will allows to hide page controller when it comes to last index means last page

    hope this will help :-) thank you ...

提交回复
热议问题