在两个失去值的 ViewController 之间传递 UIImage 数组
Posted
技术标签:
【中文标题】在两个失去值的 ViewController 之间传递 UIImage 数组【英文标题】:Passing UIImage array between two ViewControlllers losing values 【发布时间】: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
【参考方案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
的实例。以上是关于在两个失去值的 ViewController 之间传递 UIImage 数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 StoryBoard 的两个 ViewController 之间使用委托?
nil在两个ViewController之间委派两个不同的Bundle(swift)
如何在 UIPageViewController 中的两个 ViewController 之间传递数据