사용자로부터 URL을 가져오고로드하기 위해 하나의 SDK를 만들고 있습니다. 그래서 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),
])
}
}
ViewController 클래스
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
}
}
문제가 해결되지 않으면 확인하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다