UIAlertController переходит на другой контроллер при действии оповещения - Swift - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь перейти к другому контроллеру при появлении предупреждения. Он перемещается к следующему контроллеру, как и ожидалось, но как только он перешел на другой контроллер, он снова показывает то же самое предупреждение. Пожалуйста, проверьте код ниже.

func decode(decodedURL: String) {
    let alertController = UIAlertController(title: "", message: "Confirm", preferredStyle: .alert)

    let viewController = self.storyboard?.instantiateViewController(withIdentifier: "FormViewController") as? FormViewController
    viewController?.fillData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))

    let action1 = UIAlertAction(title: "Ok", style: .default) { (action) in       
        self.navigationController?.show(viewController!, sender: true)
    }


    let action2 = UIAlertAction(title: "Cancel", style: .cancel) { (action:UIAlertAction) in
        print("You've pressed cancel");       
    }

    alertController.addAction(action1)
    alertController.addAction(action2)

    self.present(alertController, animated: true, completion: nil)

}

Вызов метода выше

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
    // Check if the metadataObjects array is not nil and it contains at least one object.
    if metadataObjects.count == 0 {
        qrCodeFrameView?.frame = CGRect.zero
        messageLabel.text = "No code detected"
        return
    }
    // Get the metadata object.
    let metadataObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
    if supportedCodeTypes.contains(metadataObj.type) {
        // If the found metadata is equal to the QR code metadata (or barcode) then update the status label's text and set the bounds
        let barCodeObject = videoPreviewLayer?.transformedMetadataObject(for: metadataObj)
        qrCodeFrameView?.frame = barCodeObject!.bounds
        if metadataObj.stringValue != nil {
            decode(decodedURL: metadataObj.stringValue!)
            messageLabel.text = metadataObj.stringValue

        }
    }
}

1 Ответ

0 голосов
/ 28 августа 2018
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection)

является функцией делегата

AVCaptureMetadataOutputObjectsDelegate

. Он продолжает вызываться до тех пор, пока ваш captureSession не станет активным.

Итак, при переходе к следующему экрану просто остановите captureSession.

captureSession?.stopRunning() 
captureSession = nil
...