I am trying to implement DataScannerViewController to react native iOS app. But I am keep getting below error.
This is initializing DataScannerViewController with DataScannerVC
import UIKit
import VisionKit
final class DataScannerVC: UIViewController {
private let dataScannerViewController = DataScannerViewController(recognizedDataTypes: [.text()],
qualityLevel: .balanced,
recognizesMultipleItems: false,
isHighFrameRateTrackingEnabled: true,
isPinchToZoomEnabled: true,
isGuidanceEnabled: true,
isHighlightingEnabled: true)
private var scannerAvailable: Bool { DataScannerViewController.isSupported && DataScannerViewController.isAvailable }
override func viewDidLoad() {
super.viewDidLoad()
dataScannerViewController.delegate = self
if scannerAvailable {
present(dataScannerViewController, animated: true)
try? dataScannerViewController.startScanning()
}
}
}
And below is trying to wrap it by UIView. In below I am trying to add DataScannerVC to UIView's parent UIViewController, And also add it's view to parent's view.
import UIKit
import VisionKit
class DataScannerView: UIView {
weak var dataScannerVC: DataScannerVC?//1
@objc var stringULValue: String = "" {
didSet {
setNeedsLayout()
}
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) { fatalError("nope") }
override func layoutSubviews() {//2
super.layoutSubviews()
if dataScannerVC == nil {
embed()
} else {
dataScannerVC?.view.frame = bounds
}
}
private func embed() {//3
guard
let parentVC = parentViewController else {//4
return
}
let vc = parentVC.storyboard!.instantiateViewController(withIdentifier: "dataScannerVC") as! DataScannerVC
parentVC.addChild(vc)
addSubview(vc.view)
vc.view.frame = bounds
vc.didMove(toParent: parentVC)
self.dataScannerVC = vc
}
}
extension UIView {
var parentViewController: UIViewController? {
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.next
if let viewController = parentResponder as? UIViewController {
return viewController
}
}
return nil
}
}
But error is, in this line storyboard is null. I think my main problem here is to adding UIViewController to another UIViewController is not right. Do you have any idea to how to implement DataScannerViewController to react native ios app.
let vc = parentVC.storyboard!.instantiateViewController(withIdentifier: "dataScannerVC") as! DataScannerVC