Swift UIPageViewControllerの最大最小ページ数を設定する

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

概要

UIPageViewControllerの始点、終端のページを設定する。要は「これ以上はページをめくれないよ」という設定。

UIPageViewControllerはTableViewなどとは違ってcountを返すメソッドがないので、before、afterのメソッドで前後のページがあるか否かの判定を行いViewControllerを返す実装を行えばよい。


実装例
extension ViewController: UIPageViewControllerDataSource, UIPageViewControllerDelegate {
    // prev page
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

       //次のページがない場合はnilを返す
       if( self.isPrevPage == false ){
           return nil
       }

        let vc = PrevViewController()
        return vc
    }
    //next page
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
       //次のページがない場合はnilを返す
       if( self.isNextPage == false ){
           return nil
       }
        let vc = NextViewController()
        return vc
    }
}

上記の実装だと、ジェスチャに反応して、ページめくりのアニメーションが発生するように思われたが、実際のところアニメーションは行われず始点、終端のページに対する期待した挙動となった。