iPhoneのアプリでアプリの使い方を実装するときの忘備録です。
やりたい事は下図みたいな事です。
失敗した方法
値を渡す画面遷移するのが久しぶりだったので安易に各ボタンからSegueを用いてpdf表示の画面と繋いでみました。
呼び出し元のコード(一部分)は
@IBAction func cyuonButtonTap(_ sender: Any) {
pdfFile = "注音練習"
}
@IBAction func wordButtonTap(_ sender: Any) {
pdfFile = "単語練習"
}
@IBAction func listButtonTap(_ sender: Any) {
pdfFile = "一覧表示"
}
@IBAction func resultButtonTap(_ sender: Any) {
pdfFile = "成績表示"
}
@IBAction func fileButtonTap(_ sender: Any) {
pdfFile = "ファイル選択"
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let pdfVC = segue.destination as! manualPdfViewController
pdfVC.pdfFile = pdfFile
}
pdfの表示側は
import UIKit
import PDFKit
class manualPdfViewController: UIViewController {
var pdfFile:String!
override func viewDidLoad() {
super.viewDidLoad()
if let documentURL = Bundle.main.url(forResource: pdfFile, withExtension: "pdf") {
if let document = PDFDocument(url: documentURL) {
pdfView.document = document
// PDFの拡大率を調整する
pdfView.autoScales = true
// 表示モード
pdfView.displayMode = .singlePageContinuous
}
}
}
}
としてみました。動かない事はないのですがpdfファイル名が変更されず一つ前に表示したpdfがそのまま表示されたりでで安定しません。2回押すと必ず対応のpdfが表示されるのですがそれではダメですよね。
なので遷移元のViewControllerから遷移先へとSegueを繋いでコードで遷移させる方法に変更しました。Segueのidentifierは”pdfView”に設定しています。
呼び出し元のコード(一部分)を以下のように変更しました。pdfの表示側は変更なしです。
@IBAction func cyuonButtonTap(_ sender: Any) {
pdfFile = "注音練習"
self.performSegue(withIdentifier: "pdfView", sender: nil)
}
@IBAction func wordButtonTap(_ sender: Any) {
pdfFile = "単語練習"
self.performSegue(withIdentifier: "pdfView", sender: nil)
}
@IBAction func listButtonTap(_ sender: Any) {
pdfFile = "一覧表示"
self.performSegue(withIdentifier: "pdfView", sender: nil)
}
@IBAction func resultButtonTap(_ sender: Any) {
pdfFile = "成績表示"
self.performSegue(withIdentifier: "pdfView", sender: nil)
}
@IBAction func fileButtonTap(_ sender: Any) {
pdfFile = "ファイル選択"
self.performSegue(withIdentifier: "pdfView", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let pdfVC = segue.destination as! manualPdfViewController
pdfVC.pdfFile = ""
pdfVC.pdfFile = pdfFile
}
これでちゃんと動くようになりました。
コメント