Do it! 스위프트로 아이폰 앱 만들기
07장 웹 뷰로 간단한 웹 브라우저 만들기
URL 입력 시에 필요한 텍스트 필드 배치하기
입력 받은 URL로 홈페이지 이동을 위한 Go 버튼 배치하기
Site1, Site2, HTML, File 각 버튼 배치하기
Web View 배치하기
Tool Bar 배치하기
Tool Bar 안에 Bar Button Item 4개와 Flexible Space Bar Button Item 5개를 번갈아 배치하기
각 바 버튼을 더블 클릭해서 Attributes inspector 의 System Item 변경하기
왼쪽부터 Stop, Refresh, Rewind, Fast Forward
로딩을 표시하기 위한 Activity Indicator View 를 화면 가운데에 배치하기
Text Field, Web View, Activity Indicator View 에 대한 아웃렛 변수 추가하기
Button 5개와 Tool Bar 내의 Bar Button Item 4개에 대한 액션 함수 추가하기
import WebKit 추가하기 (WKWebView 를 사용하기 위해)
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.
loadWebPage("http://m.naver.com")
}
class ViewController: UIViewController, WKNavigationDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//추가 코드
myWebView.navigationDelegate = self
loadWebPage("http://m.naver.com")
}
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
myActivityIndicator.startAnimating()
myActivityIndicator.isHidden = false
}
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
}
func checkUrl(_ url: String) -> String {
var strUrl = url
if !strUrl.hasPrefix("http://") { strUrl = "http://" + strUrl }
return strUrl
}
@IBAction func btnGotoUrl(_ sender: UIButton) {
loadWebPage(checkUrl(txtUrl.text!))
txtUrl.text = ""
}
@IBAction func btnGoSite1(_ sender: UIButton) {
loadWebPage("https://www.youtube.com/")
}
@IBAction func btnGoSite2(_ sender: UIButton) {
loadWebPage("https://velog.io/")
}
@IBAction func btnLoadHtmlString(_ sender: UIButton) {
let htmlString = "<h1> HTML String </h1><p> String 변수를 이용한 웹 페이지 </p><p><a href=\"https://www.youtube.com\">YouTube</a>으로 이동</p>"
myWebView.loadHTMLString(htmlString, baseURL: nil)
}
@IBAction func btnLoadHtmlFile(_ sender: UIButton) {
let filePath = Bundle.main.path(forResource: "htmlView", ofType: "html")
let myUrl = URL(fileURLWithPath: filePath!)
let myRequest = URLRequest(url: myUrl)
myWebView.load(myRequest)
}
<!--htmlView.html -->
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1> HTML FILE </h1>
html File을 이용한 웹페이지<br>
<p><a href="https://velog.io">velog</a>로 이동</p>
</body>
</html>
@IBAction func btnStop(_ sender: UIBarButtonItem) {
myWebView.stopLoading()
}
@IBAction func btnReload(_ sender: UIBarButtonItem) {
myWebView.reload()
}
@IBAction func btnGoBack(_ sender: UIBarButtonItem) {
myWebView.goBack()
}
@IBAction func btnGoForward(_ sender: UIBarButtonItem) {
myWebView.goForward()
}
import UIKit
import WebKit
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://m.naver.com")
}
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
myActivityIndicator.startAnimating()
myActivityIndicator.isHidden = false
}
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
}
func checkUrl(_ url: String) -> String {
var strUrl = url
if !strUrl.hasPrefix("http://") { strUrl = "http://" + strUrl }
return strUrl
}
@IBAction func btnGotoUrl(_ sender: UIButton) {
loadWebPage(checkUrl(txtUrl.text!))
txtUrl.text = ""
}
@IBAction func btnGoSite1(_ sender: UIButton) {
loadWebPage("https://www.youtube.com/")
}
@IBAction func btnGoSite2(_ sender: UIButton) {
loadWebPage("https://velog.io/")
}
@IBAction func btnLoadHtmlString(_ sender: UIButton) {
let htmlString = "<h1> HTML String </h1><p> String 변수를 이용한 웹 페이지 </p><p><a href=\"https://www.youtube.com\">YouTube</a>으로 이동</p>"
myWebView.loadHTMLString(htmlString, baseURL: nil)
}
@IBAction func btnLoadHtmlFile(_ sender: UIButton) {
let filePath = Bundle.main.path(forResource: "htmlView", ofType: "html")
let myUrl = URL(fileURLWithPath: filePath!)
let myRequest = URLRequest(url: myUrl)
myWebView.load(myRequest)
}
@IBAction func btnStop(_ sender: UIBarButtonItem) {
myWebView.stopLoading()
}
@IBAction func btnReload(_ sender: UIBarButtonItem) {
myWebView.reload()
}
@IBAction func btnGoBack(_ sender: UIBarButtonItem) {
myWebView.goBack()
}
@IBAction func btnGoForward(_ sender: UIBarButtonItem) {
myWebView.goForward()
}
}