Swift/UICatalog/WebViewController.swift

/*
    Copyright (C) 2015 Apple Inc. All Rights Reserved.
    See LICENSE.txt for this sample’s licensing information
    
    Abstract:
    A view controller that demonstrates how to use UIWebView.
*/
 
import UIKit
 
class WebViewController: UIViewController, UIWebViewDelegate, UITextFieldDelegate {
    // MARK: Properties
    
    @IBOutlet weak var webView: UIWebView!
    
    @IBOutlet weak var addressTextField: UITextField!
 
    // MARK: View Life Cycle
 
    override func viewDidLoad() {
        super.viewDidLoad()
 
        configureWebView()
        loadAddressURL()
    }
 
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
 
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    }
 
    // MARK: Convenience
 
    func loadAddressURL() {
        if let requestURL = NSURL(string: addressTextField.text) {
            let request = NSURLRequest(URL: requestURL)
            webView.loadRequest(request)
        }
    }
 
    // MARK: Configuration
 
    func configureWebView() {
        webView.backgroundColor = UIColor.whiteColor()
        webView.scalesPageToFit = true
        webView.dataDetectorTypes = .All
    }
 
    // MARK: UIWebViewDelegate
 
    func webViewDidStartLoad(webView: UIWebView) {
        UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    }
 
    func webViewDidFinishLoad(webView: UIWebView) {
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    }
 
    func webView(webView: UIWebView, didFailLoadWithError error: NSError) {
        // Report the error inside the web view.
        let localizedErrorMessage = NSLocalizedString("An error occured:", comment: "")
 
        let errorHTML = "<!doctype html><html><body><div style=\"width: 100%%; text-align: center; font-size: 36pt;\">\(localizedErrorMessage) \(error.localizedDescription)</div></body></html>"
 
        webView.loadHTMLString(errorHTML, baseURL: nil)
 
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    }
 
    // MARK: UITextFieldDelegate
 
    /// Dismisses the keyboard when the "Done" button is clicked.
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
 
        loadAddressURL()
 
        return true
    }
}