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 { 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() } } |

