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
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 ...