【问题标题】:Passing UIImage array between two ViewControlllers losing values在两个失去值的 ViewController 之间传递 UIImage 数组
【发布时间】:2020-07-11 03:43:02
【问题描述】:

我在内存中的 2 个 VC 之间传递一组图像。我不知道这是否是一个问题并且不可能做到?当第二个视图控制器引用第一个 UIImages 数组时,我在第二个视图控制器中得到空白图像。

class ViewPDFAfterSnapshotViewController: UIViewController {
    @IBOutlet weak var pdfView: PDFView!
    @IBOutlet weak var confirmUploadButton: UIButton!
    
    @IBOutlet weak var CancelUploadButton: UIButton!
    
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let vc = CameraViewController()
        // convert to PDF
        let pdfDocument = PDFDocument()
        for i in 0 ..< vc.images.count {
            let image = vc.images[i]
              let pdfPage = PDFPage(image: image)
              pdfDocument.insert(pdfPage!, at: i)
        }
        
        pdfView.displayMode = .singlePageContinuous
        pdfView.autoScales = true
        pdfView.displayDirection = .vertical
        pdfView.document = pdfDocument
        
    }
    

编辑 1:好的,从我得到的反馈和链接的文章中我做到了:

func transistionToPDFView(){
        
        let vc = ViewPDFAfterSnapshotViewController()
        vc.images = images
        
        
        navigationController?.pushViewController(vc, animated: true)
        

        
        view.window?.rootViewController = vc
        view.window?.makeKeyAndVisible()
    }

【问题讨论】:

  • 从另一个视图控制器显示您的代码。 vc 是一个新实例。这就是为什么它们的值是空的
  • 请告诉您如何在两个视图控制器之间导航。在导航时,您将参考下一个视图控制器。届时您可以简单地传递信息。
  • 您应该将图像声明为ViewPDFAfterSnapshotViewController 的实例属性,并在呈现视图控制器之前设置图像属性。
  • @LeoDabus 我这样做了:@IBAction func cancelPressed(_ sender: Any) { let vc = ViewPDFAfterSnapshotViewController() vc.images = images transistionToPDFView() } 但它仍然为空
  • @jstocke2 您需要提供与设置图像相同的控制器。 pdfViewController.images = images

标签: swift uiimageview viewcontroller


【解决方案1】:

您正在创建CameraViewController 的新实例。这是不正确的。每次创建 CameraViewController 的新实例时,它都会是全新的引用。

您应该访问CameraViewController 的已可用/已创建实例。

在视图控制器之间执行 segue 或导航时,您可以将数据从一个视图控制器传递到另一个视图控制器。

假设您有 A 和 B 视图控制器,在 A 到 B 之间导航时,您可以执行以下操作:

let b = B() // Instantiate B view controller from storyboard with identifier

b.images = images // Data to pass to the next view controller

如果你想正确理解,可以参考这篇文章:

https://www.hackingwithswift.com/example-code/system/how-to-pass-data-between-two-view-controllers

【讨论】:

  • 我试过这个:@IBAction func cancelPressed(_ sender: Any) { let vc = ViewPDFAfterSnapshotViewController() vc.images = images transistionToPDFView() } 我以为这基本上就是你想要的,但它仍然是空的?
  • @jstocke2 从故事板访问 ViewController 并使用它来呈现或推送导航
  • 你在介绍ViewPDFAfterSnapshotViewController 吗?那个代码在哪里?如果您正在展示/推送,请使用该实例来传递信息。
  • ViewPDFAfterSnapshotViewController 创建一个可以保存图像数组的变量,并从您提供的控制器ViewPDFAfterSnapshotViewController 中传递数据。
  • 不要在viewDidLoad 中创建CameraViewController 的实例。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多