Swift 4: Изменить / Очистить PDFView содержимое

Я хочу использовать PDFView Framework в Swift 4. ( https://developer.apple.com/documentation/pdfkit/pdfview)

Следующая функция получает путь к документу PDF. Если путь действителен, файл PDF отображается успешно. Проблема возникает, когда я звоню openMe(path: String) дважды. В этом случае старый контент все еще там, и новый контент добавляется. Я просто хочу заменить старый контент новым.

private var pdfData: NSData? = nil

func openMe(path: String) {
   let fileManager = FileManager.default

   if fileManager.fileExists(atPath: path){
       let url = NSURL.fileURL(withPath: path)
       pdfData = NSData(contentsOfFile: path)
       let pdfView = PDFView(frame: self.view.frame)
       pdfViewController?.pdfViewControllerInformsMeasurementDataViewController = self
       pdfView.document = PDFDocument(url: url)
       pdfView.autoScales = true
       pdfView.maxScaleFactor = 0.5
       pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
       pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

       self.pdfViewController?.view.addSubview(pdfView)
       self.show(self.pdfViewController!, sender: nil)
    }
}

РЕДАКТИРОВАТЬ

Обратитесь к ответу excitedmicrobe: я только что изменил код, как показано в ответе, но расстояние между навигационным контроллером и PDFView отличается.

кулак openMe вызов:

введите описание изображения здесь

второй openMe вызов:

введите описание изображения здесь

2 ответа

Решение

В этом случае вам нужно будет сделать pdfView Глобальный:

До viewDidLoad() добавить следующее:

var pdfView = PDFView()

override func viewDidLoad() {
    super.viewDidLoad()

    // ....
}

И отредактируйте свой код openMe(), чтобы:

func openMe(path: String) {
     if self.pdfViewController?.view.subviews.contains(pdfView) {
          self.pdfView.removeFromSuperview() // Remove it
      } else {
          // Do Nothing
      }

     let fileManager = FileManager.default

   if fileManager.fileExists(atPath: path){
       let url = NSURL.fileURL(withPath: path)
       pdfData = NSData(contentsOfFile: path)
       self.pdfView = PDFView(frame: self.view.frame)
       pdfViewController?.pdfViewControllerInformsMeasurementDataViewController = self
       pdfView.document = PDFDocument(url: url)
       pdfView.autoScales = true
       pdfView.maxScaleFactor = 0.5
       pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
       pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

       self.pdfViewController?.view.addSubview(pdfView)
       self.show(self.pdfViewController!, sender: nil)
     }
}

В этой ситуации вам нужно получить документ, используя try? Данные (содержимое: URL-адрес).

       if let url = URL.init(string: path), let data = try? Data(contentsOf: url), let pdfDocument = PDFDocument.init(data: data){
            
            
            pdfView.displayMode = .singlePageContinuous
            pdfView.autoScales = true
            pdfView.displayDirection = .vertical
            pdfView.document = pdfDocument
            //                        
        }
Другие вопросы по тегам