개요
Project4는 간단한 웹 브라우저 앱을 작성합니다.
Xcode프로젝트 → iOS APP템플릿 사용
이 프로젝트에서는 웹뷰가 전체 공간을 차지하므로 뷰컨트롤러의 뷰가 될 수도 있습니다.
웹뷰를 작성하는 방법 중 하나인 WebKit
프레임워크의 일부인 WKWebView
를 사용
메인뷰를 웹뷰로 지정하기 떄문에 loadView
에 작성합니다.
loadView와 viewDidLoad차이
loadView : View를 로드할 경우에 사용
뷰 컨트롤러가 자신의 뷰, 그러니까 흔히 self.view처럼 접근하는 그 뷰 컨트롤러의 메인 뷰를 로드할 때 호출되는 메서드
즉, 그 메인뷰를 생성하려고 호출하는 메서드죠. 그래서 이 메서드 안에서 새로운 뷰를 만들어서 반환해줘도 됩니다.
스토리보드를 쓰면 어차피 스토리보드에 있는 뷰를 가져와 쓸테니 굳이 필요하지 않다고 볼 수 있겠네요.
viewDidLoad : awakeFromNib나 loadView가 호출된 이후에 호출 (뷰가 로드가 된 후)
이 뷰가 모두 생성되고 메모리에 생성된 후에 호출되는 메서드입니다. 즉, 뷰컨트롤러의 메인뷰가 생성 되었으니 이제 이 위에 하고픈걸 해라
https://yagom.net/forums/topic/loadview와-viewdidload-차이에-대한-질문입니다/
https://medium.com/yay-its-erica/viewdidload-vs-loadview-swift3-47f4ad195602
WKNavigationDelegate
WKNavigationDelegate : 웹 뷰에서 탐색 요청을 수락, 로드 및 완료하는 과정에서 트리거되는 사용자 지정 동작을 구현하는 데 도움이 된다.
WKNavigationDelegate를 사용하는 이유?
WKNavigationDelegate안에 선언된 델리게이트 함수를 이용하여 로딩 아이콘 표시 여부 및 URL, Protocol에 따른 다른 작업을 처리해주는 용도로 주로 사용합니다.
https://developer.apple.com/documentation/webkit/wknavigationdelegate
웹뷰에 URL 연결
let url = URL(string: "https://www.hackingwithswift.com")!
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true
https : //
포함 : 프로세스가 작동하려면 URL이 완전하고 유효해야합니다.바로가기 버튼구현 (URL바로 이동)
@objc func openTapped() {
let ac = UIAlertController(title: "Open page…", message: nil, preferredStyle: .actionSheet)
ac.addAction(UIAlertAction(title: "apple.com", style: .default, handler: openPage))
ac.addAction(UIAlertAction(title: "hackingwithswift.com", style: .default, handler: openPage))
ac.addAction(UIAlertAction(title: "Cancel", style: .cancel))
present(ac, animated: true)
}
웹페이지가 로딩을 완료했을 때 사용하는 WKNavigationDelegate 델리게이트 메서드
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
title = webView.title
}
webView
: The web view that loaded the contentnavigation
: The navigation object that finished