2017-06-19 44 views
0

我正在尝试创建一个QR应用程序,但我没有得到最后一步的工作。在Xcode的另一个ViewController中打开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) 
    } 
    } 

webview.swift

@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) 



    } 

编辑 感谢您的帮助@sharon!

我已经完成了这项工作。 不过,也有一些错误消息

见下

webview.swift

ViewController.swift

链接的图片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 

    ) 
     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) 
    } 

} 

webview.swift

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!) 




     } 

    } 

回答

2

好吧,先来看看这个答案的网页视图添加到视图编程(我认为这是在故事板拉一个从对象库的最佳实践): https://stackoverflow.com/a/31651004/4301118

一简单的教程,可以帮助:
https://medium.com/@felicity.johnson.mail/web-view-tutorial-swift-3-0-4a5f4f6858d3

接下来在你的故事板,拉一个UIViewController,并将其链接到webview.swift类(如果你还没有做到的话)。

将控制从ViewController拖动到刚刚拖出的新控件,并将其命名为segue(我将其称为“webview”)。 创建属性var qrLink: String? qrLink将用于存储读取器结果。 现在在ViewController.swift阅读器功能放置在qrLink刚才添加的结果,并通过将这些线触发SEGUE:

qrLink = "\(result.value)\(result.metadataType)" 
performSegue(withIdentifier: "webview", sender: self) 

声明属性的QR链接存储在您的WebView像你一样在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!) 
} 

希望它帮助。

+0

这听起来很合理! :-) 我该如何做到这一点最简单的入门? (我是一个很大的初学者) –

+0

查看我的回答以上 (试着回答,但它在你的文章上方) –

相关问题