browser app

screen-shot-2016-11-26-at-07-06-42

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import UIKit
 
class ViewController: UIViewController, UIWebViewDelegate, UITextFieldDelegate {
     
     
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var webView: UIWebView!
    @IBOutlet weak var backButton: UIBarButtonItem!
    @IBOutlet weak var forwardButton: UIBarButtonItem!
    @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        let topBorder = CALayer()
        topBorder.frame = CGRectMake(0, 0, self.webView.frame.size.width, 1)
        topBorder.backgroundColor = UIColor.lightGrayColor().CGColor
        self.webView.layer.addSublayer(topBorder)
        self.webView.delegate = self
        self.textField.delegate = self
         
        self.webView.delegate  = self
        self.textField.delegate = self
         
        // string -> NSURL -> NSURLRequest -> webView.loadRequest
        let startUrl = "http://google.com"
//        if let url = NSURL(string: startUrl){
//            let urlRequest = NSURLRequest(URL: url)
//            self.webView.loadRequest(urlRequest)
//        }
        self.jumpToUrl(startUrl)
        self.setupButtonsEnabled()
        self.activityIndicatorView.hidesWhenStopped = true
    }
     
    func jumpToUrl(urlString: String){
        if let url = NSURL(string: urlString){
            let urlRequest = NSURLRequest(URL: url)
            self.webView.loadRequest(urlRequest)
        } else {
            self.showAlert("Invalid URL")
        }
    }
     
    func showAlert(message: String){
        let alertController = UIAlertController(title: "Error", message:message, preferredStyle: .Alert)
        let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
        alertController.addAction(defaultAction)
        self.presentViewController(alertController, animated: true, completion: nil)
    }
     
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        var urlString = self.textField.text
        urlString = urlString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
        if urlString == "" {
            // alert
            self.showAlert("please enter URL")
        } else {
            if urlString.hasPrefix("http://") && !urlString.hasPrefix("https://") {
                urlString = "http://" + urlString
            }
            self.jumpToUrl(urlString)
            self.setupButtonsEnabled()
        }
        self.textField.resignFirstResponder()
        return true
    }
     
    func setupButtonsEnabled() {
        self.backButton.enabled = self.webView.canGoBack
        self.forwardButton.enabled = self.webView.canGoForward
    }
     
    func webView(webView: UIWebView, didFailLoadWithError error: NSError) {
        self.webView.stopLoading()
        self.activityIndicatorView.stopAnimating()
         
        if error.code != NSURLErrorCancelled {
            self.showAlert("Network Error")
        }
        self.updateUrlLocation()
    }
     
    func webViewDidStartLoad(webView: UIWebView) {
        self.activityIndicatorView.startAnimating()
    }
     
    func updateUrlLocation(){
        if let urlString = self.webView.request?.URL?.absoluteString {
            self.textField.text = urlString
        }
    }
     
     
    func webViewDidFinishLoad(webView: UIWebView) {
        self.activityIndicatorView.stopAnimating()
        self.setupButtonsEnabled()
        self.updateUrlLocation()
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
     
    @IBAction func goBack(sender: AnyObject) {
        self.webView.goBack()
    }
     
    @IBAction func goForward(sender: AnyObject) {
        self.webView.goForward()
    }
     
    @IBAction func reload(sender: AnyObject) {
        self.webView.reload()
    }
 
}