Ios 在Xcode中的另一个ViewController中打开QR链接
我正在尝试做一个QR应用程序,但我没有完成最后一步 今天,当我做扫描时,我得到一个结果警报。我希望该链接直接发送到我的webview控制器,并在我的webview中读取地址,而不是显示警报 ViewController.swiftIos 在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
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的初学者)请看上面我的答案(试图回答,但在你的帖子上方)