Xcodeで値を渡しながら画面遷移させて違うpdfを表示する

Xcode

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
    }

これでちゃんと動くようになりました。

コメント

タイトルとURLをコピーしました