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의 로딩이 실패했을 때 호출된다.