### 前提・実現したいこと
ドットインストール でブラウザーアプリを学んでいました。
このサイトでは、UIWebViewでアプリを作成していました。私も同じようにやってみてたのですがいくつかの要素が動きません。
WKWebViewに切り替える必要があると思いました。しかし、始めたばかりでどこを修正していいのかわかりません。ご教授していただければ幸いです。
発生している問題・エラーメッセージ
読み込むoutletが機能しない。 URLが表示されない。 ボタンが非表示にならない。
試したこと
ViewControlle.swiftでいくつかWKWebViewのコードを入れてみました。
補足情報(FW/ツールのバージョンなど)
viewController.swift
1// 2// ViewController.swift 3// BrowserApp 4// 5// Created by user on 2020/08/31. 6// Copyright © 2020 user. All rights reserved. 7// 8 9import UIKit 10import WebKit 11 12class ViewController: UIViewController, WKUIDelegate, UITextFieldDelegate { 13 14 15 var webView: WKWebView! 16 17 @IBOutlet weak var urlTextField: UITextField! 18 @IBOutlet weak var browserWebView: WKWebView! 19 20 @IBOutlet weak var backButton: UIBarButtonItem! 21 @IBOutlet weak var forwardButton: UIBarButtonItem! 22 @IBOutlet weak var reloadButton: UIBarButtonItem! 23 24 @IBOutlet weak var browserActivityIndicatorView: UIActivityIndicatorView! 25 26 override func viewDidLoad() { 27 super.viewDidLoad() 28 29 self.browserWebView.uiDelegate = self 30 self.urlTextField.delegate = self 31 self.browserActivityIndicatorView.hidesWhenStopped = true 32 // Do any additional setup after loading the view, typical from a nib. 33 } 34 35 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 36 if textField != self.urlTextField { 37 return true 38 } 39 if let urlString = textField.text { 40 self.loadUrl(urlString: urlString) 41 } 42 return true 43 } 44 45 func textFieldDidBeginEditing(_ textField: UITextField) { 46 if textField != self.urlTextField { 47 return 48 } 49 textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument) 50 } 51 52 func webViewDidStartLoad(_ webView: WKWebView) { 53 self.browserActivityIndicatorView.startAnimating() 54 } 55 56 func webViewDidFinishLoad(_ webView: WKWebView) { 57 if let urlString = self.browserWebView.url?.absoluteString 58 { 59 self.urlTextField.text = urlString 60 } 61 self.browserActivityIndicatorView.stopAnimating() 62 self.backButton.isEnabled = self.browserWebView.canGoBack 63 self.forwardButton.isEnabled = self.browserWebView.canGoForward 64 } 65 66 override func viewDidAppear(_ animated: Bool) { 67 super.viewDidAppear(animated) 68 let urlString = "http://dotinstall.com" 69// let urlString = "" 70 self.loadUrl(urlString: urlString) 71 self.addBorder() 72 } 73 74 func addBorder() { 75 let topBorder = CALayer() 76 topBorder.frame = CGRect(x: 0.0, y: 0.0, width: self.browserWebView.frame.size.width, height: 1.0) 77 topBorder.backgroundColor = UIColor.lightGray.cgColor 78 self.browserWebView.layer.addSublayer(topBorder) 79 } 80 81 82 func showAlert(_ message: String) { 83 let alertController = UIAlertController(title: "Error", message: message, preferredStyle: .alert) 84 let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil) 85 alertController.addAction(defaultAction) 86 self.present(alertController, animated: true, completion: nil) 87 } 88 89 90 func webView(_ webView: WKWebView, didFailLoadWithError error: Error) { 91 if (error as! URLError).code == URLError.cancelled { 92 return 93 } 94 self.showAlert("Network Error") 95 self.browserWebView.stopLoading() 96 self.browserActivityIndicatorView.stopAnimating() 97 } 98 99 func getValidatedUrl(urlString: String) -> URL? { 100 let trimmed = urlString.trimmingCharacters(in: NSCharacterSet.whitespaces) 101 if URL(string: trimmed) == nil { 102 // print("Invalid URL") 103 self.showAlert("Invalid URL") 104 return nil 105 } 106 return URL(string: self.appendScheme(trimmed)) 107 } 108 109 func appendScheme(_ urlString: String) -> String { 110 if URL(string: urlString)?.scheme == nil { 111 return "http://" + urlString 112 } 113 return urlString 114 } 115 116 func loadUrl(urlString: String) { 117 if let url = self.getValidatedUrl(urlString: urlString) { 118 let urlRequest = URLRequest(url: url) 119 self.browserWebView.load(urlRequest) 120 } 121 } 122 123 124 override func didReceiveMemoryWarning() { 125 super.didReceiveMemoryWarning() 126 // Dispose of any resources that can be recreated. 127 } 128 129 130 131 @IBAction func goBack(_ sender: Any) { 132 self.browserWebView.goBack() 133 } 134 135 @IBAction func goForward(_ sender: Any) { 136 self.browserWebView.goForward() 137 } 138 139 @IBAction func reload(_ sender: Any) { 140 self.browserWebView.reload() 141 } 142 143} 144 1458
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/02 11:34
2020/09/02 12:57
2020/09/02 13:50
2020/09/02 19:42