0

WKWebview にそのデリゲート メソッド、つまり完了したメソッドを呼び出すのに苦労しています。

WKWebView にロードされた html を使用して PDF レポートを生成するこの投稿に似たようなことを試みています。

WKWebView がナビゲーション デリゲート メソッドを呼び出していない

しかし、そこで提案を試みても、それは私にはうまくいきません。メソッドを呼び出すビューコントローラーとは別のクラスで作成された WKWebView があります。

単純に WebView に Web サイトをロードして、デリゲート関数が呼び出されるかどうかを確認しようとすると、何も得られません。

これが私のテストクラスです。

import UIKit
import WebKit

class TestWebview: NSObject {

let webView = WKWebView ()

func loadWebsite () {
    
    print ("LOAD TEST CALLED")

    webView.navigationDelegate = self
    
    let link = URL(string: "https://www.apple.com")!
    
    let request = URLRequest(url: link)
    
    webView.load(request)
    
 }

}

extension TestWebview: WKNavigationDelegate {


func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
    print ("DID COMMIT")
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    print ("FINISHED LOADING")
}


}

そして、これが別のView Controllerで呼び出す方法です。

override func viewDidLoad() {

super.viewDidLoad()

  let test = TestWebview ()
  
  test.loadWebsite()

 }

ただし、Storyboards を使用して WKWebView をアウトレットとしてビュー コントローラーに配置すると、デリゲート メソッドが呼び出されます。ただし、ビューコントローラーでWebビューを表示したくないため、これを回避しようとしています。そのためのすべてのコードを別のクラスに分離したままにします。

何か不足していますか?これに関する Stack Overflow の他のさまざまな投稿を確認しても、ナビゲーション デリゲートが設定されていることを確認する以外に解決策はありませんでした。どんな助けでも大歓迎です。

4

1 に答える 1

1

クラス レベルに移動する必要がありlet test = TestWebview ()ます。そうしないと、このオブジェクトは が完了viewDidLoadすると削除されます。navigationDelegateweak

于 2021-12-18T20:52:54.363 に答える