PageViewController.swiftファイルでコンテンツ用のViewControllerを複数作成して、コンテンツ用のレイアウトは別のViewController(1つ)のファイルに記述し、CSVファイルを遷移したページのindexで呼出すようにすることで解決しました。
使用した部品は、NavigationController, 既存ViewController, PageViewController, Viewcontrollerを1つ(コンテンツ用)
コードはざっくりこんな感じ。
class PageViewController: UIPageViewController, UIPageViewControllerDataSource {
var selectedCell:Int = 0 // 遷移元から渡される値
var cellCount = 0 // 遷移元から渡される値
var contentVCs:[UIViewController] = []
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
// コンテンツとなるViewControllerを遷移元のセルの数だけ作成
for index in 0..<cellCount {
let contentVC = storyboard?.instantiateViewController(withIdentifier:
"PageContentViewController") as! PageContentViewController
contentVC.pageIndex = index
contentVCs.append(contentVC)
}
// タップされたセルのindexからコンテンツページを呼出し
self.setViewControllers([contentVCs[selectedCell]], direction: .forward,
animated: true, completion: nil)
}
(略)
}
class PageContentViewController: UIViewController {
var pageIndex:Int = 0
var csvArray:[String] = []
var currentArray:[String] = []
override func viewDidLoad() {
super.viewDidLoad()
// CSVデータを表示ページのindexに応じて取得し、配列に格納
csvArray = loadCSV("test")
currentArray = csvArray[pageIndex].components(separatedBy: ";")
currentArray = currentArray.filter {$0 != ""}
// ラベル作成
for index in 0..<currentArray.count {
let label = UILabel()
label.frame = CGRect(x:20, y:100+(30*index), width:100, height:30)
label.text = currentArray[index] // ここでCSVデータの入った配列を使用
self.view.addSubview(label)
}
}
(略)
}