WebView의 Activity Indicator 구현

Posted on 2021-09-05 by GKSRUDTN99
Swift&Xcode Xcode Delegate WebView ActivityIndicator

Activity Indicator로 로딩 보이기

1. ViewController 클래스가 'WKNavigationDelegate'를 상속받도록 하고, viewDidLoad() 함수를 다음과 같이 작성한다.
class ViewController: UIViewController, WKNavigationDelegate {
    @IBOutlet var txtUrl: UITextField!
    @IBOutlet var myWebView: WKWebView!
    @IBOutlet var myActivityIndicator: UIActivityIndicatorView!

    func loadWebPage(_ url: String){
        let myUrl = URL(string: url)
        let myRequest = URLRequest(url: myUrl!)
        myWebView.load(myRequest)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        myWebView.navigationDelegate = self
        loadWebPage("http://codecamper.me/blog/")
    }
//  ( ... 생략 ...)
2. webView와 didCommit을 인수로 받는 webView 함수를 추가하고, 다음과 같이 작성한다.
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
        myActivityIndicator.startAnimating()
        myActivityIndicator.isHidden = false
    }
  • 위 함수는 webView가 로딩 중일 때, 호출되는 Delgate 메서드이다.
3. 같은 방법으로 두개의 함수를 더 추가한다.
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        myActivityIndicator.stopAnimating()
        myActivityIndicator.isHidden = true
    }

func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        myActivityIndicator.stopAnimating()
        myActivityIndicator.isHidden = true
    }
  • didFinish를 인수로 받는 함수는 webView의 로딩이 끝났을 때,
  • didFail을 인수로 받는 함수는 webView의 로딩이 실패했을 때 호출된다.