swift - 在 SFSafariViewController 中打开从二维码扫描的 URL

标签 swift xcode8 qr-code uialertcontroller sfsafariviewcontroller

我正在尝试让我的应用打开二维码扫描的网址。我做了一个二维码扫描仪,但它只将扫描的二维码的值复制到粘贴板。我试图让它在 SFSafariViewController 中打开它。 而不是“复制”选项,我想让它“打开”并实际打开扫描的 url。

这是我的代码

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
    if metadataObjects != nil && metadataObjects.count != 0
    {
        if let object = metadataObjects[0] as? AVMetadataMachineReadableCodeObject
        {
            if object.type == AVMetadataObjectTypeQRCode
            {
                let alert = UIAlertController(title: "QR Code", message: object.stringValue, preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "Retake", style: .default, handler: nil))
                alert.addAction(UIAlertAction(title: "Copy", style: .default, handler: { (nil) in
                    UIPasteboard.general.string = object.stringValue

                }))
                present(alert, animated: true, completion: nil)

            }
        }
    }

}

最佳答案

使用 safariviewController 非常简单

首先你必须导入 safariservices 然后给 safaricontroller 一个 url

基本代码是

import SafariServices

func loadSafari(url : String){
  guard let url = URL(string: url) else { return }

  let safariController = SFSafariViewController(url: url)
  present(safariController, animated: true, completion: nil)
}

将此代码放在您的类中并在您的捕获输出中调用该函数

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) {
if metadataObjects != nil && metadataObjects.count != 0
{
    if let object = metadataObjects[0] as? AVMetadataMachineReadableCodeObject
    {
        if object.type == AVMetadataObjectTypeQRCode
        {

                UIPasteboard.general.string = object.stringValue
                loadSafari(url: object.stringValue)

            }))
            present(alert, animated: true, completion: nil)

        }
    }
}

}

点击完成将关闭 safariController 并让用户导航回到上一个 View Controller 。

希望对您有所帮助。让我知道进展如何。

关于swift - 在 SFSafariViewController 中打开从二维码扫描的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45479659/

相关文章:

ios - 第一个 Firebase 查询项在刷新之前出现乱序问题

ios - 从应用商店安装后是否可以获取链接内容?

swift - 在 xcode 8 的派生数据文件夹中找到项目路径

json - 在Swift 3中正确解析JSON

ios - 当 firebase 没有任何东西可供抓取时,如何停止网络指示器以停止旋转

Swift 无法从上下文推断类型

swift - 为什么这个 Swift Playground 打印和循环两次?

android - zxing如何增加扫描区域大小

javascript - 使用 Angular JS 请求二维码并显示图像

java - 如何使用java在android中绘制带有圆角矩形的二维码?