减肥视图控制器-条形码扫描仪不再工作



我的应用程序上有一个按钮,可以打开条形码扫描仪,然后我可以扫描物品,它会打印条形码等。

我的Viewcontroller充满了代码,我只想创建另一个类来分离,让我的代码更容易阅读。所以我把所有的条形码扫描仪代码都放在类"中;Partnyallen";并把我的纽扣留在课堂上;NewViewController";。我可以打开条形码,但只要我扫描一个项目,或者即使我按下";取消";按钮里面,它只是冻结。可能是什么问题?

感谢您的帮助!

import AVFoundation
import QRCodeReader
import Alamofire

class Partynallen: UIViewController, QRCodeReaderViewControllerDelegate {
lazy var readerVC: QRCodeReaderViewController = {
let builder = QRCodeReaderViewControllerBuilder {
//change object to scan and the initial position of the camera
$0.reader = QRCodeReader(metadataObjectTypes: [.qr, .ean13], captureDevicePosition: .back)
// Configure the view controller (optional)
$0.showTorchButton = true
$0.showSwitchCameraButton = false
$0.showCancelButton = true
$0.showOverlayView = true //shows the square area of the QRCode Scanner
$0.rectOfInterest = CGRect(x: 0, y: 0, width: 1, height: 1)
}
return QRCodeReaderViewController(builder: builder)
}()



override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
readerVC.delegate = self
}

func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
//code to be added
reader.stopScanning()
//print(result)
//print(result.value)
//barcode = result.value
//Apifetch(code: "URL")
dismiss(animated: true, completion: nil)
}
func readerDidCancel(_ reader: QRCodeReaderViewController) {
//code to be added
reader.stopScanning()
dismiss(animated: true, completion: nil)
}

}

class NewViewController: UIViewController {

var partynallen: Partynallen?

override func viewDidLoad() {
super.viewDidLoad()

partynallen = Partynallen() // DONT KNOW IF THIS IS CORRECT? 
}

@IBAction func scan(_ sender: UIButton) {
partynallen.readerVC.modalPresentationStyle = .formSheet
present(partynallen.readerVC, animated: true)
}


}

您有3个视图控制器NewViewControllerQRCodeReaderViewControllerPartynallen。但实际上,您从来没有呈现Partynallen,只是将其用作扫描仪的代理,相反,您只呈现readerVC。因此,当调用readerDidCancel(:)时,您会尝试忽略未显示的Partynallen

使用仅充当扫描程序代理的ViewController似乎有点太多了。您可以删除UIViewController基类(如果扫描程序委派协议不需要它(。因为委托函数(例如readerDidCancel(:),(提供了扫描程序vc,所以您可以使用该vc来自行消除它。

最新更新