首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UIViewControllerRepresentable中传递数据

在UIViewControllerRepresentable中传递数据
EN

Stack Overflow用户
提问于 2019-10-12 15:46:57
回答 2查看 1.4K关注 0票数 4

我正在尝试用UIKit创建一个PDFView,并将来自先前SwiftUI视图的数据传递给它。数据本身是一个带有文件名的字符串。不知何故,字符串不会从UIViewControllerRepresentable传递到UIViewController,而是保留为空。我真的找不到为什么会发生这样的事情。你能检查一下我哪里错了吗?我希望这段代码足够了。

我正在使用NavigationLink(目标:FileViewerWrapper(文件:“某个字符串”)) {}

代码语言:javascript
复制
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

   }
}

结果是://

它应该是://

EN

回答 2

Stack Overflow用户

发布于 2019-11-21 10:31:47

当你只想传递数据时,使用一个单独的UIViewControllerRepresentable,它将拥有你的UIViewController,然后将数据从视图传递到ViewController。

代码语言:javascript
复制
struct CameraViewControllerRepresentable : UIViewControllerRepresentable {
    typealias UIViewControllerType = CameraViewController
    var patientObject: PatientObj

    public func makeUIViewController(context: UIViewControllerRepresentableContext<CameraViewControllerRepresentable>) -> CameraViewController {
        let cameraVC = UIStoryboard(name: "Camera", bundle: nil).instantiateViewController(identifier: String(describing: CameraViewController.self)) as! CameraViewController
        cameraVC.patientObj = patientObject
        return cameraVC


       }

    func updateUIViewController(_ uiViewController: CameraViewController, context: UIViewControllerRepresentableContext<CameraViewControllerRepresentable>) {

    }

}
票数 2
EN

Stack Overflow用户

发布于 2019-10-12 17:15:37

我想我已经搞定了:

代码语言:javascript
复制
func makeUIViewController(context: UIViewControllerRepresentableContext<FileViewerWrapper>) -> FileViewerWrapper.UIViewControllerType {
    let uiViewController = FileViewer()
    uiViewController.file = file

       return uiViewController
   }

func updateUIViewController现在为空

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58352016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档