답변 4
0
0
0
앱딜리게이트
//
// AppDelegate.swift
// MyWebBrowser
//
// Created by 박단비 on 15/05/2019.
// Copyright © 2019 박단비. All rights reserved.
//
import UIKit
/// 마지막 페이지 주소를 UserDefaults에서 관리하기 위한 키 값
let lastPageURLDefaultKey: String = "lastURL"
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// MARK: - Properties
var window: UIWindow?
var lastPageURL: URL?
// MARK: - Methods
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
self.lastPageURL = UserDefaults.standard.url(forKey: lastPageURLDefaultKey)
return true
}
func applicationWillResignActive(_ application: UIApplication) {
let userDefaults: UserDefaults
userDefaults = UserDefaults.standard
UserDefaults.set(self.lastPageURL, forKey: lastPageURLDefaultKey)
userDefaults.synchronize()
}
func applicationDidEnterBackground(_ application: UIApplication) {
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
}
0
뷰 컨트롤러
//
// ViewController.swift
// MyWebBrowser
//
// Created by 박단비 on 15/05/2019.
// Copyright © 2019 박단비. All rights reserved.
//
import UIKit
import WebKit
class ViewController: UIViewController {
//MARK: - Properties
//MARK: IBOutlets
@IBOutlet var webView: WKWebView!
@IBOutlet var activityIndicator: UIActivityIndicatorView!
//MARK: - Methods
//MARK: Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.webView.navigationDelegate = self as? WKNavigationDelegate
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let firstPageURL: URL?
if let lastURL: URL = UserDefaults.standard.url(forKey: lastPageURLDefaultKey) {
firstPageURL = lastURL
} else {
firstPageURL = URL(string: "https://www.google.com")
}
guard let pageURL: URL = firstPageURL else {
return
}
let urlRequest: URLRequest = URLRequest(url: pageURL)
self.webView.load(urlRequest)
}
// MARK: IBActions
@IBAction func goBack(_ sender: UIBarButtonItem) {
self.webView.goBack()
}
@IBAction func goForward(_ sender: UIBarButtonItem) {
self.webView.goForward()
}
@IBAction func refresh(_ sender: UIBarButtonItem) {
self.webView.reload()
//MARK: Custom Methods
func showNetworkingIndicators() {
self.activityIndicator.isHidden = false
self.activityIndicator.startAnimating()
UIApplication.shared.isNetworkActivityIndicatorVisible = true
func hideNetworkingIndicators() {
self.activityIndicator.isHidden = true
self.activityIndicator.stopAnimating()
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
}
extension ViewController: WKNavigationDelegate {
// MARK : WKNavigationDelegate
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("did finish navigation")
if let appDelegate: AppDelegate = UIApplication.shared.delegate as? AppDelegate {
AppDelegate.lastPageURL = webView.url
}
webView.evaluateJavaScript("document.title") { (value: Any?, error: Error?) in
if let error: Error = error {
print(error.localizedDescription)
return
}
guard let title: String = value as? String else {
return
}
self.navigationItem.title = title
}
self.hideNetworkingIndicators()
}
func webView(_ webView, didFail navigation: WKNavigation!, withError error: Error) {
print("did fail navigation")
print("\(error.localizedDescription)")
self.hideNetworkingIndicators()
let message: String = "오류발생!\n" + error.localizedDescription
let alert: UIAlertController
alert = UIAlertController(title: "알림", message, preferredStyle: UIAlertController.alert)
let okayaction: UIAlertAction
okayaction = UIAlertAction(title: "확인", style: UIAlertAction.Style.cancel, handler: nil)
alert.addAction(okayaction)
self.present(alert, animated: true, completion: nil)
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print("did start navigation")
self.showNetworkingIndicators()
}
}
}
}