Ios 在Xcode中的另一个ViewController中打开QR链接

Ios 在Xcode中的另一个ViewController中打开QR链接,ios,swift,xcode,qr-code,Ios,Swift,Xcode,Qr Code,我正在尝试做一个QR应用程序,但我没有完成最后一步 今天,当我做扫描时,我得到一个结果警报。我希望该链接直接发送到我的webview控制器,并在我的webview中读取地址,而不是显示警报 ViewController.swift func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) { reader.stopScanning() dismiss

我正在尝试做一个QR应用程序,但我没有完成最后一步

今天,当我做扫描时,我得到一个结果警报。我希望该链接直接发送到我的webview控制器,并在我的webview中读取地址,而不是显示警报

ViewController.swift

func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
    reader.stopScanning()



    dismiss(animated: true) { [weak self] in
      let alert = UIAlertController(
        title: "Hittade",
        message: String (format:"%@", result.value, result.metadataType),
        preferredStyle: .alert


      )


      alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

      self?.present(alert, animated: true, completion: nil)
    }
  }
 @IBOutlet var containerView: UIView? = nil
    var webView: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()

  let myURL = URL(string: "MY RESULT URL HERE")
        let myRequest = URLRequest(url: myURL!)
        _ = webView?.load(myRequest)



    }
 func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
    reader.stopScanning()



    dismiss(animated: true) { [weak self] in
      let alert = UIAlertController(
        title: "Hittade",
        message: String (format:"%@", result.value, result.metadataType),
        preferredStyle: .alert

      )
        var qrLink: String?
        qrLink = "\(result.value)\(result.metadataType)"
        performSegue(withIdentifier: "WebView", sender: self)

      alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

      self?.present(alert, animated: true, completion: nil)
    }
  }

    func prepare(for segue: UIStoryboardSegue, sender: Any?){
        if segue.identifier == "WebView" {
            let webView = segue.destination as! webview
            webView.qrLink = "%@"
        }}

  func reader(_ reader: QRCodeReaderViewController, didSwitchCamera newCaptureDevice: AVCaptureDeviceInput) {
    if let cameraName = newCaptureDevice.device.localizedName {
      print("Switching capturing to: \(cameraName)")
    }
  }

  func readerDidCancel(_ reader: QRCodeReaderViewController) {
    reader.stopScanning()

    dismiss(animated: true, completion: nil)
  }

}
import AVFoundation
import UIKit
import WebKit

class WebView: UIViewController, QRCodeReaderViewControllerDelegate {




    @IBOutlet var containerView: UIView? = nil
    var webView: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()



        setNeedsStatusBarAppearanceUpdate()

        view.backgroundColor = UIColor(red: 109/255, green: 167/255, blue: 215/255, alpha: 1)

        var qrLink: String?
        var webView: UIWebView?


            super.viewDidLoad()
            let myURL = URL(string: qrLink!)
            let myRequest = URLRequest(url: myURL!)
            webView = UIWebView(frame: CGRect(x: 0, y: 0, width:
                UIScreen.main.bounds.width, height:
                UIScreen.main.bounds.height))
            webView?.loadRequest(myRequest)
            view.addSubview(webView!)




        }

    }
webview.swift

func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
    reader.stopScanning()



    dismiss(animated: true) { [weak self] in
      let alert = UIAlertController(
        title: "Hittade",
        message: String (format:"%@", result.value, result.metadataType),
        preferredStyle: .alert


      )


      alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

      self?.present(alert, animated: true, completion: nil)
    }
  }
 @IBOutlet var containerView: UIView? = nil
    var webView: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()

  let myURL = URL(string: "MY RESULT URL HERE")
        let myRequest = URLRequest(url: myURL!)
        _ = webView?.load(myRequest)



    }
 func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
    reader.stopScanning()



    dismiss(animated: true) { [weak self] in
      let alert = UIAlertController(
        title: "Hittade",
        message: String (format:"%@", result.value, result.metadataType),
        preferredStyle: .alert

      )
        var qrLink: String?
        qrLink = "\(result.value)\(result.metadataType)"
        performSegue(withIdentifier: "WebView", sender: self)

      alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

      self?.present(alert, animated: true, completion: nil)
    }
  }

    func prepare(for segue: UIStoryboardSegue, sender: Any?){
        if segue.identifier == "WebView" {
            let webView = segue.destination as! webview
            webView.qrLink = "%@"
        }}

  func reader(_ reader: QRCodeReaderViewController, didSwitchCamera newCaptureDevice: AVCaptureDeviceInput) {
    if let cameraName = newCaptureDevice.device.localizedName {
      print("Switching capturing to: \(cameraName)")
    }
  }

  func readerDidCancel(_ reader: QRCodeReaderViewController) {
    reader.stopScanning()

    dismiss(animated: true, completion: nil)
  }

}
import AVFoundation
import UIKit
import WebKit

class WebView: UIViewController, QRCodeReaderViewControllerDelegate {




    @IBOutlet var containerView: UIView? = nil
    var webView: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()



        setNeedsStatusBarAppearanceUpdate()

        view.backgroundColor = UIColor(red: 109/255, green: 167/255, blue: 215/255, alpha: 1)

        var qrLink: String?
        var webView: UIWebView?


            super.viewDidLoad()
            let myURL = URL(string: qrLink!)
            let myRequest = URLRequest(url: myURL!)
            webView = UIWebView(frame: CGRect(x: 0, y: 0, width:
                UIScreen.main.bounds.width, height:
                UIScreen.main.bounds.height))
            webView?.loadRequest(myRequest)
            view.addSubview(webView!)




        }

    }
编辑 谢谢你的帮助@sharon

到目前为止,我已经这样做了。 但是,存在一些错误消息

请参阅下面的链接图片

ViewController.swift

func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
    reader.stopScanning()



    dismiss(animated: true) { [weak self] in
      let alert = UIAlertController(
        title: "Hittade",
        message: String (format:"%@", result.value, result.metadataType),
        preferredStyle: .alert


      )


      alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

      self?.present(alert, animated: true, completion: nil)
    }
  }
 @IBOutlet var containerView: UIView? = nil
    var webView: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()

  let myURL = URL(string: "MY RESULT URL HERE")
        let myRequest = URLRequest(url: myURL!)
        _ = webView?.load(myRequest)



    }
 func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
    reader.stopScanning()



    dismiss(animated: true) { [weak self] in
      let alert = UIAlertController(
        title: "Hittade",
        message: String (format:"%@", result.value, result.metadataType),
        preferredStyle: .alert

      )
        var qrLink: String?
        qrLink = "\(result.value)\(result.metadataType)"
        performSegue(withIdentifier: "WebView", sender: self)

      alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

      self?.present(alert, animated: true, completion: nil)
    }
  }

    func prepare(for segue: UIStoryboardSegue, sender: Any?){
        if segue.identifier == "WebView" {
            let webView = segue.destination as! webview
            webView.qrLink = "%@"
        }}

  func reader(_ reader: QRCodeReaderViewController, didSwitchCamera newCaptureDevice: AVCaptureDeviceInput) {
    if let cameraName = newCaptureDevice.device.localizedName {
      print("Switching capturing to: \(cameraName)")
    }
  }

  func readerDidCancel(_ reader: QRCodeReaderViewController) {
    reader.stopScanning()

    dismiss(animated: true, completion: nil)
  }

}
import AVFoundation
import UIKit
import WebKit

class WebView: UIViewController, QRCodeReaderViewControllerDelegate {




    @IBOutlet var containerView: UIView? = nil
    var webView: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()



        setNeedsStatusBarAppearanceUpdate()

        view.backgroundColor = UIColor(red: 109/255, green: 167/255, blue: 215/255, alpha: 1)

        var qrLink: String?
        var webView: UIWebView?


            super.viewDidLoad()
            let myURL = URL(string: qrLink!)
            let myRequest = URLRequest(url: myURL!)
            webView = UIWebView(frame: CGRect(x: 0, y: 0, width:
                UIScreen.main.bounds.width, height:
                UIScreen.main.bounds.height))
            webView?.loadRequest(myRequest)
            view.addSubview(webView!)




        }

    }
webview.swift

func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
    reader.stopScanning()



    dismiss(animated: true) { [weak self] in
      let alert = UIAlertController(
        title: "Hittade",
        message: String (format:"%@", result.value, result.metadataType),
        preferredStyle: .alert


      )


      alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

      self?.present(alert, animated: true, completion: nil)
    }
  }
 @IBOutlet var containerView: UIView? = nil
    var webView: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()

  let myURL = URL(string: "MY RESULT URL HERE")
        let myRequest = URLRequest(url: myURL!)
        _ = webView?.load(myRequest)



    }
 func reader(_ reader: QRCodeReaderViewController, didScanResult result: QRCodeReaderResult) {
    reader.stopScanning()



    dismiss(animated: true) { [weak self] in
      let alert = UIAlertController(
        title: "Hittade",
        message: String (format:"%@", result.value, result.metadataType),
        preferredStyle: .alert

      )
        var qrLink: String?
        qrLink = "\(result.value)\(result.metadataType)"
        performSegue(withIdentifier: "WebView", sender: self)

      alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))

      self?.present(alert, animated: true, completion: nil)
    }
  }

    func prepare(for segue: UIStoryboardSegue, sender: Any?){
        if segue.identifier == "WebView" {
            let webView = segue.destination as! webview
            webView.qrLink = "%@"
        }}

  func reader(_ reader: QRCodeReaderViewController, didSwitchCamera newCaptureDevice: AVCaptureDeviceInput) {
    if let cameraName = newCaptureDevice.device.localizedName {
      print("Switching capturing to: \(cameraName)")
    }
  }

  func readerDidCancel(_ reader: QRCodeReaderViewController) {
    reader.stopScanning()

    dismiss(animated: true, completion: nil)
  }

}
import AVFoundation
import UIKit
import WebKit

class WebView: UIViewController, QRCodeReaderViewControllerDelegate {




    @IBOutlet var containerView: UIView? = nil
    var webView: WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()



        setNeedsStatusBarAppearanceUpdate()

        view.backgroundColor = UIColor(red: 109/255, green: 167/255, blue: 215/255, alpha: 1)

        var qrLink: String?
        var webView: UIWebView?


            super.viewDidLoad()
            let myURL = URL(string: qrLink!)
            let myRequest = URLRequest(url: myURL!)
            webView = UIWebView(frame: CGRect(x: 0, y: 0, width:
                UIScreen.main.bounds.width, height:
                UIScreen.main.bounds.height))
            webView?.loadRequest(myRequest)
            view.addSubview(webView!)




        }

    }

好的,首先看看这个答案,以编程方式将您的webView添加到视图中(我认为最好的做法是从故事板中的对象库中提取一个):

可能有帮助的简单教程:

接下来在故事板中,拉一个UIViewController并将其链接到webview.swift类(以防您还没有这样做)

控制从ViewController拖动到您刚刚拉取的新控制器,并将segue命名为任何您喜欢的名称(我将其称为“webview”)。 创建属性
var qrLink:String?
qrLink将用于存储读卡器结果。 现在,在ViewController.swift的reader函数中,将结果放入刚才添加的qrLink中,并通过添加以下行触发序列:

qrLink = "\(result.value)\(result.metadataType)"
performSegue(withIdentifier: "webview", sender: self)
声明一个属性以在webview中存储QR链接,就像在ViewController中一样

接下来,在ViewController.swift中添加此函数:

func prepare(for segue: UIStoryboardSegue, sender: Any?){
    if segue.identifier == "webview" {
        let webView = segue.destination as! webview
        webView.qrLink = "YOUR READER RESULT"
}}
webview.swift

var qrLink: String?
var webView: UIWebView?

override func viewDidLoad(){
    super.viewDidLoad()
    let myURL = URL(string: qrLink!)
    let myRequest = URLRequest(url: myURL!)
    webView = UIWebView(frame: CGRect(x: 0, y: 0, width: 
        UIScreen.main.bounds.width, height: 
        UIScreen.main.bounds.height))
    webView?.loadRequest(myRequest)
    view.addSubview(webView!)
}
希望有帮助。

听起来很合理!:-)我如何做到这一点最容易开始?(我是swift的初学者)请看上面我的答案(试图回答,但在你的帖子上方)