Delegateメソッドの使い方に関しまして、自分の理解が正しいかどうか分からなかった為、ご質問させて頂きました。
以下のコードにおきまして、画面がロードが開始した際に使われるメソッド func webView〜didcommit
及びfunc webView〜didfinish
は デリゲートメソッドであるかと思います。このデリゲートメソッドなのですが、基本的には、使用する際class ViewController: UIViewController,WKNavigationDelegate
このようにし、継承するクラスのような記述をするかと思います。自分の理解では、クラスとの違いにつきましては、必ず使用するメソッドはオーバーライドしなければならず、webView.navigationDelegate = self
このようにデリゲートプロパティをもつ、インスタンスに対し、どこのクラスで処理を行うかを指定しなければならない(今回の場合はselfを指定している為、ViewController内で、func webView
の処理を行わなければならない)このように理解しているのですが、合っていますでしょうか...?
もし、理解に間違いなどありましたら、教えていただけましたら幸いです。
よろしくお願いします。
import UIKit import WebKit class ViewController: UIViewController,WKNavigationDelegate { var webView = WKWebView() @IBOutlet weak var indicator: UIActivityIndicatorView! @IBOutlet weak var toolBar: UIToolbar! override func viewDidLoad() { super.viewDidLoad() //実体になっているか //大きさ webView.frame = CGRect(x: 0, y: toolBar.frame.size.height, width: view.frame.size.width, height: view.frame.size.height - toolBar.frame.size.height*2) view.addSubview(webView) //何をロードするか webView.navigationDelegate = self let url = URL(string: "https://www.yahoo.co.jp/") let request = URLRequest(url:url!) webView.load(request) //ロードが開始された時 func webView(_ webview:WKWebView, didCommit: WKNavigation){ print("読み込み開始") indicator.startAnimating() } //ロードが完了した時 func webView(_webView: WKWebView, didFinish navigation: WKNavigation!){ print("ロード完了") indicator.stopAnimating() } //どこにつけるか } @IBAction func go(_ sender: Any) { } @IBAction func back(_ sender: Any) { webView.goBack() } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/21 01:15