UIPageViewControllerに固定ボタンを追加したい
UIPageViewControllerを使用して横スワイプで画面遷移させることはできたのですが、今後画面の上部に固定ボタンを追加して、そのボタンでも画面遷移できるようにしたいと考えておりますが、実装方法が不明のため、ご教授願います。
■用意したファイル
FirstViewController.swift(中身はデフォルトです)
SecondViewController.swift(中身はデフォルトです)
ThirdViewController.swift(中身はデフォルトです)
PageViewController.swift(UIPageViewControllerクラスを継承したファイル)
■実装コード
PageViewController.swift
import UIKit
class PageViewController: UIPageViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.setViewControllers([getFirst()], direction: .forward, animated: true, completion: nil)
self.dataSource = self as UIPageViewControllerDataSource //追加
}
func getFirst() -> FirstViewController {
return storyboard!.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
}
func getSecond() -> SecondViewController {
return storyboard!.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
}
func getThird() -> ThirdViewController {
return storyboard!.instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
//以下追加
extension PageViewController : UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
if viewController.isKind(of: ThirdViewController.self) {
// 3 -> 2
return getSecond()
} else if viewController.isKind(of: SecondViewController.self) {
// 2 -> 1
return getFirst()
} else {
// 1 -> end of the road
return nil
}
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
if viewController.isKind(of: FirstViewController.self) {
// 1 -> 2
return getSecond()
} else if viewController.isKind(of: SecondViewController.self) {
// 2 -> 3
return getThird()
} else {
// 3 -> end of the road
return nil
}
}
}
■参考にしたサイト
https://qiita.com/Takeshi_Akutsu/items/dbf54df8e8a50e8ed5be