2017-06-19 46 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

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

相關問題