๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
๋ฌธ์
์น ๋ทฐ์ HTML ํ์ผ์ ์ฝ์ด ๋์คํ๋ ์ดํ๊ณ ์์ ์ ๋ธ๋ก๊ทธ ๋งํฌ๋ฅผ ๊ฑธ์ด ํด๋ฆญ์ ์ด๋ํ๊ฒ ๋ง๋ค์ด๋ณด์. ๊ทธ๋ฆฌ๊ณ URL ๊ฒ์ ๊ธฐ๋ฅ์ ๋ง๋ค์ด ๋ฒํผ ํด๋ฆญ ์ ์น ๋ทฐ์ ํด๋น ์น ํ์ด์ง๊ฐ ๋จ๋๋ก ๊ตฌํํ๋ผ. ๋ํ์ฌ ํด๋ฐ์ ์ ์ง, ์๋ก ๊ณ ์นจ, ์ด์ ํ์ด์ง ์ด๋, ๋ค์ ํ์ด์ง ์ด๋ ๋ฒํผ์ ๊ตฌํํ์ฌ ์น ํ์ด์ง ๊ด๋ จ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ผ.
๊ตฌํ ์์
- ๋ ์ด์์ ๊ตฌ์ฑ
- ์์ธ๋ ๋ณ์์ ์ก์ ํจ์ ์์ฑ
- ์ฑ ์์ ํ๋ฉด ์ด๊ธฐํ - HTML ํ์ผ๋ก ์น ํ์ด์ง ์์ฑ
- url ์ ๋ ฅ ๊ธฐ๋ฅ ๊ตฌํ
- ํด๋ฐ ๋ฒํผ ๊ธฐ๋ฅ ๊ตฌํ
- ์กํฐ๋นํฐ ์ธ๋์ผ์ดํฐ ๊ตฌํ
์ต์ข ๊ฒฐ๊ณผ
1. ๋ ์ด์์ ๊ตฌ์ฑ
1.1 ์น ๋ทฐ Web View
: ์น ์ฝํ ์ธ ๋ฅผ ๋ทฐ(view) ํํ๋ก ๋ณด์ฌ ์ฃผ๋ ์ฑ. HTML๋ก ์์ฑ๋ ํํ์ด์ง๋ฅผ ํ์ํ ์ ์๋ค.
WebKit View
Displays embedded web content and enables content navigation.
ํฌํจ๋ ์น ์ฝํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ฝํ ์ธ ํ์์ ํ์ฑํํ๋ค.
WebKit View์ ์์ธ๋ ๋ณ์ ์์ฑ ์ WKWebView ํ์ ์ผ๋ก ์ ์ธํ๋ค. WKEwbView๋ WebKit๋ฅผ import ํด์ผ ์ฌ์ฉํ ์ ์๋ค.
WKWebView ํด๋์ค
An object that displays interactive web content, such as for an in-app browser.
์ธ์ฑ ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ด ๋ํํ์ ์น ์ฝํ ์ธ ๋ฅผ ํ์ํ๋ ๊ฐ์ฒด
1.2 ํด๋ฐ Toolbar
Toolbar
displays a horizontal bar of buttons
Provides a mechanism for displaying a toolbar at the bottom of the screen and supports the display and selection of toolbar items (instances of UIToolbarItem). You can use UIToolbarDelegate to specify custom views for toolbar items.
๋ฒํผ์ด ์๋ ์ํ ๋ฐ.
ํ๋ฉด ์๋์ ํด๋ฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ฐ ์์ดํ ์ ํ์์ ์ ํ์ ์ง์ํ๋ค. UIToolbarDelegate๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฐ ์์ดํ ์ ๋ํ ์ปค์คํ ๋ทฐ๋ฅผ ์ง์ ํ ์ ์๋ค.
์ฉ๋
ํด๋ฐ์๋ ํด๋ฐ ์์ดํ ์ด๋ผ๊ณ ํ๋ ํ ๊ฐ ์ด์์ ๋ฒํผ์ด ์๋๋ฐ, ์ด ๋ฒํผ์ ๋ณดํต ํ๋ฉด์ ํ์ฌ ๋ด์ฉ๊ณผ ๊ด๋ จ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ค.
๋ฐ ๋ฒํผ ์์ดํ ์ ํด๋ฐ๋ ๋ด๋น๊ฒ์ด์ ๋ฐ์ ๋ฐฐ์นํ๊ธฐ ์ํด ํนํ๋ ๋ฒํผ์ด๋ฏ๋ก ๋ฒํผ๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ค.
System Item ์์ฑ์ ํตํด ๊ธฐ๋ฅ์ ๋ง๊ฒ ์์ด์ฝ์ ๋ณ๊ฒฝํ ์ ์๋ค.
์) ์ ์ง(Stop), ์๋ก ๊ณ ์นจ(Refresh), ๋๊ฐ๊ธฐ(Rewind), ์์ผ๋ก ๊ฐ๊ธฐ(FastFoward)
ํ๋ ์๋ธ ์คํ์ด์ค ๋ฐ ๋ฒํผ ์์ดํ Flexible Space Bar Button Item
ํด๋ฐ์ ๊ณต๊ฐ์ ๊ฐ์ ๊ฐ๊ฒฉ์ผ๋ก ๋๋ ๋ฐ ๋ฒํผ ์์ดํ ์ ๋ฐฐ์นํ ๋ ์ฌ์ฉํ๋ค.
Flexible | Item | Flexible | Item | Flexible | Item | Flexible | Item | Flexible |
1.4 ์กํฐ๋นํฐ ์ธ๋์ผ์ดํฐ ๋ทฐ
์กํฐ๋นํฐ ์ธ๋์ผ์ดํฐ ๋ทฐ Activity Indicator View
A view that shows that a task is in progress.
์ผ์ ์งํ ์ ๋๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ทฐ. ์ฆ ๋ก๋ฉ์ ํ์ํด์ฃผ๋ ๋ทฐ
Hides When Stopped ์์ฑ์ true๋ก ํ์ฌ ๋์์ ๋ฉ์ถ๋ฉด ์กํฐ๋นํฐ ์ธ๋์ผ์ดํฐ ๋ทฐ๊ฐ ๋ณด์ด์ง ์๋๋ก ํ๋ค.
2. ์์ธ๋ ๋ณ์์ ์ก์ ํจ์ ์์ฑ
- ์์ธ๋ ๋ณ์: ๊ฐ์ฒด์ ๊ฐ์ ์ด์ฉํ๊ฑฐ๋ ์์ฑ์ ์ ์ดํด์ผ ํ ๋ ์์ฑ. ์) ํ ์คํธ ํ๋์ text๋ฅผ ๋ฐ์์ฌ ๋ text ์์ฑ ์ฌ์ฉ
- ์ก์ ํจ์: ๊ฐ์ฒด๊ฐ ์ ํ๋์์ ๋ ์ด๋ค ๋์์ ์ํํด์ผ ํ๋ค๋ฉด ์์ฑ
import UIKit
import WebKit
class WebMissionViewController: UIViewController {
@IBOutlet var txtUrl: UITextField!
@IBOutlet var myWebView: WKWebView!
@IBOutlet var MyActivityIndicator: UIActivityIndicatorView!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnGotoUrl(_ sender: UIButton) {
}
@IBAction func btnBarStop(_ sender: UIBarButtonItem) {
}
@IBAction func btnBarReload(_ sender: UIBarButtonItem) {
}
@IBAction func btnBarGoBack(_ sender: UIBarButtonItem) {
}
@IBAction func btnBarGoForward(_ sender: UIBarButtonItem) {
}
}
3. ์ฑ ์์ ํ๋ฉด ์ด๊ธฐํ - HTML ํ์ผ๋ก ์น ํ์ด์ง ์์ฑ
3.1 Info.plist ํ์ผ ์์ ํ๊ธฐ
Information property list์ ์ฝ์์ด๋ฉฐ, ํค-๊ฐ ์์ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด์๋ค. ์ฌ๋ฌ ํญ๋ชฉ๋ค๊ณผ ๊ด๋ จ๋ ๋ฆฌ์์ค ์ค์ ์ด ๋ค์ด์๋ค.
์น ๋ทฐ์ ์น ํ์ด์ง๊ฐ ๋ก๋๋๊ฒ ํ๋ ค๋ฉด ์ค์ ์ ์ถ๊ฐํด์ผ ํ๋ค.
- Information Property List์ App Transport Security Settings์ ์ถ๊ฐํ๋ค.
- App Transport Security Settings์ AllowArbitrary Loads(์์ ๋ก๋ ํ์ฉ)๋ฅผ ์ถ๊ฐํ๋ค.
- AllowArbitrary Loads์ ๊ฐ์ Yes๋ก ๋ฐ๊พผ๋ค. ์ฆ, ์์๋ก ์น ํ์ด์ง๋ฅผ ๋ก๋ํ๋ ๊ฒ์ ํ์ฉํ๋ค๋ ์๋ฏธ์ด๋ค.
3.2 loadWebPage ํจ์ ๊ตฌํ
:์น ๋ทฐ์ ์นํ์ด์ง๋ฅผ ๋ณด์ฌ ์ฃผ๊ธฐ ์ํ ํจ์
//์น ๋ทฐ์ ์น ํ์ด์ง๋ฅผ ๋ก๋ํ๊ธฐ ์ํ ํจ์
func loadWebPage(_ url: String) {
let myUrl = URL(string: url)
let myRequest = URLRequest(url: myUrl!)
myWebView.load(myRequest)
}
URL
A value that identifies the location of a resource, such as an item on a remote server or the path to a local file
๋ก์ปฌ ํ์ผ์ ๊ฒฝ๋ก ๋๋ ์๊ฒฉ ์๋ฒ์ ๋ํ ์์ดํ ๊ฐ์ด ๋ฆฌ์์ค์ ์์น๋ฅผ ์๋ณํ๋ ๊ฐ
URLRequest
A value that identifies the location of a resource, such as an item on a remote server or the path to a local file
ํ๋กํ ์ฝ ๋๋ URL scheme์ ๋ ๋ฆฝ์ ์ธ URL ๋ก๋ ์์ฒญ
WKWebView.load(_ request: URLRequest)
Loads the web content referenced by the specified URL request object and navigates to it.
์ง์ ๋ URL ์์ฒญ ๊ฐ์ฒด์์ ์ฐธ์กฐ๋ ์น ์ฝํ ์ธ ๋ฅผ ๋ก๋ํ๊ณ , ํด๋น ๊ฐ์ฒด๋ก ์ด๋ํ๋ค.
3.3 HTML ํ์ผ ์์ฑ
HTML ๋ฌธ๋ฒ์ ๋ง๊ฒ ์์ฑ๋ ํ์ผ์ ์น ๋ทฐ์ ๋ํ๋ผ ์ ์๋ค.
- File/New/File... ์ ํ
- Other์ Empty ์ ํ
- ํ์ผ๋ช .html ์์ฑ
- ์์ฑ๋ ํ์ผ์ HTML ๋ฌธ๋ฒ์ ๋ง๋๋ก ์ฝ๋ ์์ฑ
<html>
<head>
<meta charset = "utf-8">
</head>
<body>
<h1> HTML ํ์ผ </h1>
html ํ์ผ์ ์ด์ฉํ ์น ํ์ด์ง<br>
<p>๋์ ๋ธ๋ก๊ทธ <a href="https://88yhtserof.tistory.com">88yhtserof</a>๋ก ์ด๋</p>
</body>
</html>
3.4 ์น ๋ทฐ์ HTML ํ์ผ๋ก ์์ฑํ ์น ํ์ด์ง ๋จ๊ฒ ํ๊ธฐ
override func viewDidLoad() {
super.viewDidLoad()
//์ด๊ธฐ ํ๋ฉด ์ค์
let filePath = Bundle.main.path(forResource: "htmlView", ofType: "html")
let fileUrl = URL(fileURLWithPath: filePath!)
let fileRequest = URLRequest(url: fileUrl)
myWebView.load(fileRequest)
}
4. URL ์ ๋ ฅ ๊ธฐ๋ฅ ๊ตฌํ
ํ ์คํธ ํ๋์ ์ฃผ์๋ฅผ ์ ๋ ฅํ๊ณ 'Go' ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์น ๋ทฐ์ ํด๋น ์ฃผ์ ์น ํ์ด์ง๊ฐ ๋จ๋๋ก ๊ตฌํํ๋ค.
์ ๋์ฌ๋ก ํ๋กํ ์ฝ, ์ฆ 'https://'๊ฐ ์๋์ง ํ์ธํ๊ณ ์์ผ๋ฉด ๋ถ์ฌ์ ์น ํ์ด์ง๋ฅผ ๋ก๋ํ๋ค.
//์ฃผ์์ ํ๋กํ ์ฝ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ํจ์
func checkUrl(_ url: String) -> String {
var strUrl:String = url
let flag = strUrl.hasPrefix("https://")
if !flag {
strUrl = "https://" + strUrl
}
return strUrl
}
@IBAction func btnGotoUrl(_ sender: UIButton) {
let myUrl = checkUrl(txtUrl.text!)
txtUrl.text = ""
loadWebPage(myUrl)
}
5. ํด๋ฐ ์์ดํ ๋ฒํผ ๊ตฌํํ๊ธฐ - ์ ์ง, ์ฌ๋ก๋ฉ, ์ด์ ํ์ด์ง, ๋ค์ ํ์ด์ง
@IBAction func btnBarStop(_ sender: UIBarButtonItem) {
myWebView.stopLoading()
}
@IBAction func btnBarReload(_ sender: UIBarButtonItem) {
myWebView.reload()
}
@IBAction func btnBarGoBack(_ sender: UIBarButtonItem) {
myWebView.goBack()
}
@IBAction func btnBarGoForward(_ sender: UIBarButtonItem) {
myWebView.goForward()
}
๋ฉ์๋ ๋ช | ์ค๋ช |
stopLoading() | Stops loading all resources on the current page. ํ์ฌ ํ์ด์ง์ ๋ชจ๋ ๋ฆฌ์์ค ๋ก๋ฉ์ ์ค๋จํ๋ค. |
reload() | Reloads the current webpage. ํ์ฌ ํ์ด์ง๋ฅผ ์ฌ๋ก๋ฉํ๋ค. (์น ํ์ด์ง ์๋ก๊ณ ์นจ) |
goBack() | Navigates to the back item in the back-forward list. ์, ๋ค ๋ชฉ๋ก ์ค ๋ค ํญ๋ชฉ์ผ๋ก ์ด๋ํ๋ค.(์ด์ ์น ํ์ด์ง๋ก ์ด๋) |
goForward() | Navigates to the forward item in the back-forward list. ์, ๋ค ๋ชฉ๋ก ์ค ์ ํญ๋ชฉ์ผ๋ก ์ด๋ํ๋ค. (๋ค์ ์น ํ์ด์ง๋ก ์ด๋) |
6. ์กํฐ๋นํฐ ์ธ๋์ผ์ดํฐ ๊ตฌํ
์กํฐ๋นํฐ ์ธ๋์ผ์ดํฐ Activity Indicator
: ์ฑ์ด ๋์ ์ค์์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ ์ค๋ค. ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ก๋ฉ, ์๋ฃ, ์คํจ์ ๋ํ ๋์์ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ธ๋ฆฌ๊ฒ์ดํธ๋?
https://88yhtserof.tistory.com/23
WKNavigationDelegate ํ๋กํ ์ฝ
Methods for accepting or rejecting navigation changes, and for tracking the progress of navigation requests.
Implement the methods of the WKNavigationDelegate protocol in the object you use to coordinate changes in your web view’s main frame
For example, you might use these methods to restrict navigation from specific links within your content. You might also use them to track the progress of requests, and to respond to errors and authentication challenges.
์ด๋ ๋ณํ๋ฅผ ์๋ฝ ๋๋ ๊ฑฐ๋ถํ๊ณ , ์ด๋ ์์ฒญ์ ์งํ ์ฌํญ์ ์ถ์ ํ๋ ๋ฉ์๋
์น ๋ทฐ์ ๋ฉ์ธ ํ๋ ์์ ๋ณํ๋ฅผ ์กฐ์ ํ๋๋ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ WKNavigationDelegate ํ๋กํ ์ฝ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ค.
์๋ฅผ ๋ค์ด, ์ง์ ๋ ๋งํฌ๋ก ์ด๋์ ์ ํํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค. ๋ ์์ฒญ์ ์งํ ์ํญ์ ์ถ์ ํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ , ์ค๋ฅ ๋ฐ ์ธ์ฆ ๋ฌธ์ ์ ์๋ตํ ์๋ ์๋ค.
didCommit๋ฅผ ์ธ์๋ก ๊ฐ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋
Tells the delegate that the web view has started to receive content for the main frame.
์น ๋ทฐ๊ฐ ๋ฉ์ธ ํ๋ ์์ ๋ํ ์ฝํ ์ธ ๋ฅผ ์์ ํ๊ธฐ ์์ํ๋ค๋ ๊ฒ์ ๋ธ๋ฆฌ๊ฒ์ดํธ์๊ฒ ์๋ฆฐ๋ค.
๋ก๋ฉ ์ค์ธ์ง ํ์ธํ๋ ๋ฉ์๋
//didCommit์ ์ธ์๋ก ๊ฐ๋ ๋ฉ์๋
//๋ก๋ฉ ์ค์ธ์ง ํ์ธํ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
MyActivityIndicator.startAnimating()
MyActivityIndicator.isHidden = false
}
navigation | The navigation object that uniquely identifies the load request. ๋ก๋ ์์ฒญ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ํ์ ๊ฐ์ฒด |
didFinish๋ฅผ ์ธ์๋ก ๊ฐ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋
Tells the delegate that navigation is complete.
ํ์์ด ์๋ฃ๋์์์ ๋ธ๋ฆฌ๊ฒ์ดํธ์๊ฒ ์๋ฆฐ๋ค.
๋ก๋ฉ์ด ์๋ฃ๋์์ ๋ ๋์ํ๋ ๋ฉ์๋
//didFinish๋ฅผ ์ธ์๋ก ๊ฐ๋ ๋ฉ์๋
//๋ก๋ฉ์ด ๋๋ฌ์์ ์๋ฆฌ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
MyActivityIndicator.stopAnimating()
MyActivityIndicator.isHidden = true
}
navigation | The navigation object that finished. ์๋ฃ๋ ํ์ ๊ฐ์ฒด |
didFail๊ณผ withError์ ์ธ์๋ก ๊ฐ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋
Tells the delegate that an error occurred during navigation.
ํ์ํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋ธ๋ฆฌ๊ฒ์ดํธ์๊ฒ ์๋ฆฐ๋ค.
๋ก๋ฉ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ๋์ํ๋ ๋ฉ์๋
//didFail๊ณผ withError์ ์ธ์๋ก ๊ฐ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋
//๋ก๋ฉ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ ์๋ฆฌ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋ฉ์๋
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
MyActivityIndicator.stopAnimating()
MyActivityIndicator.isHidden = true
}
navigation | The navigation object for the operation. This object corresponds to a WKNavigationobject that WebKit returned when the load operation began. You use it to track the progress of that operation. ์์ ์ ๋ํ ํ์ ๊ฐ์ฒด. ์ด ๊ฐ์ฒด๋ WebKit์ด ๋ก๋ฉ ์์ ์ ์์ํ ๋ ๋ฐํํ๋ WKNavigationobject์ ํด๋นํ๋ค. ์์ ์ ์งํ์ํฉ์ ์ถ์ ํ ๋ ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค. |
error | The error that occurred. ๋ฐ์ํ ์ค๋ฅ |
Do It! ์ค์ํํธ๋ก ์์ดํฐ ์ฑ ๋ง๋ค๊ธฐ ๊ฐ์ 5ํ
SWIFT ๋ฌธ์