本文介绍了如何修复加载我自己班级的Webview URL时出现黑屏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在创建一个SDK来从用户和加载获取url。所以我正在用WKWebview
创建我自己的类。但我遇到一些关于实例成员webView
不能用于类型MyWebView(UIview)
我的代码:
import Foundation
import WebKit
public class MyWebView: UIView, WKNavigationDelegate {
// initialize the view
var webView: WKWebView!
// get the url and load the page
public func passUrl(url: String) {
guard let url = URL(string: url) else { return }
webView = WKWebView()
webView.navigationDelegate = self
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true
webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
}
// Observe value
override public func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if let key = change?[NSKeyValueChangeKey.newKey] {
print("URL Changes: (key)")
let alert = UIAlertController(title: "URL Changed", message: "(key)", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "No", style: .cancel, handler: nil))
self.window?.rootViewController?.present(alert, animated: true, completion: nil)
}
}
}
我的视图控制器:
class ViewController: UIViewController {
var webView = MyWebView()
override func viewDidLoad() {
super.viewDidLoad()
view = webView
webView.passUrl(url: "https://www.swiggy.com")
}
}
当我运行时,我的屏幕显示为黑色。不知道我在做什么王。任何帮助都是最好的。
谢谢
推荐答案
尝试此代码。经过测试并为我工作。MyWebView类
import Foundation
import WebKit
public class MyWebView: UIView, WKNavigationDelegate {
// initialize the view
let view: WKWebView = {
let view = WKWebView()
return view
}()
// get the url and load the page
public func passUrl(url: String) {
guard let url = URL(string: url) else { return }
view.navigationDelegate = self
view.load(URLRequest(url: url))
view.allowsBackForwardNavigationGestures = true
view.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
}
// Observe value
override public func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if let key = change?[NSKeyValueChangeKey.newKey] {
print("URL Changes: (key)")
let alert = UIAlertController(title: "URL Changed", message: "(key)", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "No", style: .cancel, handler: nil))
self.window?.rootViewController?.present(alert, animated: true, completion: nil)
}
}
public override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupView() {
view.translatesAutoresizingMaskIntoConstraints = false
addSubview(view)
NSLayoutConstraint.activate([
view.topAnchor.constraint(equalTo: topAnchor),
view.leadingAnchor.constraint(equalTo: leadingAnchor),
view.trailingAnchor.constraint(equalTo: trailingAnchor),
view.bottomAnchor.constraint(equalTo: bottomAnchor),
])
}
}
视图控制器类
import UIKit
class ViewController: UIViewController {
var webView = MyWebView()
override func viewDidLoad() {
super.viewDidLoad()
webView.passUrl(url: "https://www.swiggy.com")
}
override func loadView() {
view = webView
}
}
如果这不能解决问题,请让我知道。
这篇关于如何修复加载我自己班级的Webview URL时出现黑屏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!