【问题标题】:can't open QR url from an alert view in Swift无法从 Swift 的警报视图中打开 QR url
【发布时间】:2016-03-25 13:09:38
【问题描述】:

我正在尝试使用 Swift 从 QR 打开 URL,但我无法使用代码来执行此操作。我试过这个函数代码:

func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {

    if metadataObjects == nil || metadataObjects.count == 0 {
        vwQRCode?.frame = CGRectZero
        return
    }

    let objMetadataMachineReadableCodeObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject

    if objMetadataMachineReadableCodeObject.type == AVMetadataObjectTypeQRCode {
        let objBarCode = objCaptureVideoPreviewLayer?.transformedMetadataObjectForMetadataObject(objMetadataMachineReadableCodeObject as AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject
        vwQRCode?.frame = objBarCode.bounds;

        if objMetadataMachineReadableCodeObject.stringValue != nil {
            let alert = UIAlertController(title: "Se ha detectado QR", message: objMetadataMachineReadableCodeObject.stringValue, preferredStyle: UIAlertControllerStyle.Alert)
            alert.addAction(UIAlertAction(title: "Abrir Link", style: UIAlertActionStyle.Default, handler: //nil))

                {action in

                    //UIApplication.sharedApplication().openURL(NSURL(string: "http://www.google.cl")!)
                    UIApplication.sharedApplication().openURL(NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue))
            }))

            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
            self.presentViewController(alert, animated: true, completion: nil)
        }
    }
}

但是当我从 alertView 中单击按钮时,什么也不做。 然后我尝试使用 google URL 并打开没有问题。 请有人帮助我!

【问题讨论】:

    标签: swift uialertview qr-code nsurl func


    【解决方案1】:

    好的。我终于做到了。 我只是将“fileURLWithPath”更改为“string”

    之前

    UIApplication.sharedApplication().openURL(NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue))
    

    之后

    UIApplication.sharedApplication().openURL(NSURL(string: objMetadataMachineReadableCodeObject.stringValue)!)
    

    现在在 iOS10 中使用 Swift3,openURL 已被弃用,但如果您将“openURL”更改为“open”,则效果很好。

    UIApplication.sharedApplication().open(NSURL(string: objMetadataMachineReadableCodeObject.stringValue)!)
    

    【讨论】:

      【解决方案2】:

      您的代码似乎运行良好。尝试做一个简单的:

      print(objMetadataMachineReadableCodeObject.stringValue)
      

      并查看返回的内容,因为这表明这是您的问题所在。您的二维码可能包含一些引号?

      【讨论】:

      • 我试试你的代码,但做同样的事情。二维码不包含引号。
      【解决方案3】:

      没有任何反应,因为系统无法处理生成的 URL。您应该在此之前检查此功能:

      let url = NSURL(fileURLWithPath: objMetadataMachineReadableCodeObject.stringValue)
      if UIApplication.sharedApplication().canOpenURL(url) {
         UIApplication.sharedApplication().openURL(url)
      }
      

      你的二维码真的会指向文件 URL 或网页链接吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-12
        • 2020-04-02
        • 2017-05-17
        • 2017-08-20
        • 1970-01-01
        • 2020-05-22
        • 2017-05-26
        相关资源
        最近更新 更多