Передача данных в UIViewControllerRepresentable - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь создать PDFView с UIKit и передать ему данные из предыдущего представления SwiftUI. Сами данные представляют собой строку с именем файла. Каким-то образом строка не передается из UIViewControllerRepresentable в UIViewController и остается пустой. Я действительно не могу найти причину, почему это происходит. Не могли бы вы проверить, где я не прав? Надеюсь, этого кода достаточно.

Я использую NavigationLink (назначение: FileViewerWrapper (file: "some string")) {}

import PDFKit
import UIKit
import SwiftUI

let pdfView = PDFView()

class FileViewer: UIViewController {

var file = String()


override func viewDidLoad() {
    super.viewDidLoad()

    print("\n\n\n-----------------------\(file)\n-------------------------------\n\n\n")

    pdfView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(pdfView)

    pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
    pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
    pdfView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true

    guard let path = Bundle.main.url(forResource: file, withExtension: "pdf", subdirectory: "Files") else { return }

    if let document = PDFDocument(url: path) {
        pdfView.document = document
    }
}
}


struct FileViewerWrapper: UIViewControllerRepresentable {

var file: String

typealias UIViewControllerType = FileViewer


   func makeUIViewController(context: UIViewControllerRepresentableContext<FileViewerWrapper>) -> FileViewerWrapper.UIViewControllerType {
       return FileViewer()
   }

   func updateUIViewController(_ uiViewController: FileViewerWrapper.UIViewControllerType, context: UIViewControllerRepresentableContext<FileViewerWrapper>) {

    uiViewController.file = file
   //When I put print(file) here, it's fine

   }
}

В результате: // ----------------------- // -------------------------------

Должно быть: // ----------------------- String // -------------------------------

1 Ответ

0 голосов
/ 12 октября 2019

Я думаю, что прибил:

func makeUIViewController(context: UIViewControllerRepresentableContext<FileViewerWrapper>) -> FileViewerWrapper.UIViewControllerType {
    let uiViewController = FileViewer()
    uiViewController.file = file

       return uiViewController
   }

func updateUIViewController теперь пуст

...