How to implement DataScannerViewController to React Native

115 Views Asked by At

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
0

There are 0 best solutions below