title: iOS - How to create WKWebView Back Button programmatically?
body: <p>I am attempting to create a back button for my iOS WKWebView app so that way when the user clicks on the button it takes them to the previous WKWebView page. I have found numerous tutorials on how to do this with IB but not with straight code. This is what I have so far:</p>
  
  <p>Original ViewController.swift:</p>
  
  <pre><code>import UIKit
  import WebKit
  
  class ViewController: UIViewController, WKNavigationDelegate {
  
      private var webView: WKWebView!
  
      let wv = WKWebView(frame: UIScreen.mainScreen().bounds) //needed for working webview
  
      self.webView = WKWebView(frame: frame)
      self.webView.navigationDelegate = self
  
      func rightbutton(text: String, action: Selector) {
          let rightButton = UIBarButtonItem(title: text, style: .Plain, target: self, action: action)
          self.navigationItem.rightBarButtonItem = rightButton
      }
  
      func action() {
          if self.webView.canGoBack {
              print ("Can go back")
              self.webView.goBack()
              self.webView.reload()
  
          } else {
              print ( "Can't go back")
          }
      }
  
  
      override func viewDidLoad() {
          super.viewDidLoad()
          guard let url =  NSURL(string: "http://communionchapelefca.org/app-home") else { return }
          wv.navigationDelegate = self
          wv.loadRequest(NSURLRequest(URL: url))
          view.addSubview(wv)
  
  
          webView.goBack()
          webView.reload()
  
  
  
          prefButton()
          //backButton()
  
          NSNotificationCenter.defaultCenter().addObserver(self,
              selector: "receiveNotification:",
              name: "BeaconServiceRegionEnter",
              object: nil)
  
          NSNotificationCenter.defaultCenter().addObserver(self,
              selector: "receiveNotification:",
              name: "BeaconServiceRegionUpdate",
              object: nil)
  
          NSNotificationCenter.defaultCenter().addObserver(self,
              selector: "receiveNotification:",
              name: "BeaconServiceRegionExit",
              object: nil)
  
      }
  
      override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
          // Dispose of any resources that can be recreated.
      }
  
      func prefButton () {
          let image = UIImage(named: "icon-pref128") as UIImage?
          let button   = UIButton(type: UIButtonType.Custom) as UIButton
          let screenSize: CGRect = UIScreen.mainScreen().bounds
          let screenWidth = screenSize.width
          let screenHeight = screenSize.height
  
          button.frame = CGRectMake(screenWidth * 0.85, screenHeight * 0.90, 56, 56) // (X, Y, Height, Width)
          button.setImage(image, forState: .Normal)
          button.addTarget(self, action: "buttonClicked:", forControlEvents:.TouchUpInside)
          self.view.addSubview(button)
      }
  
      func buttonClicked(sender:UIButton)
      {
          UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
      }
  
      func receiveNotification(notification: NSNotification) {
          print(notification.userInfo)
      }
  
      func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -&gt; Void) {
          if navigationAction.navigationType == .LinkActivated  {
              if let newURL = navigationAction.request.URL,
                  host = newURL.host where !host.containsString("communionchapelefca.org") &amp;&amp;
                      UIApplication.sharedApplication().canOpenURL(newURL) {
                          if UIApplication.sharedApplication().openURL(newURL) {
                              print(newURL)
                              print("Redirected to browser. No need to open it locally")
                              decisionHandler(.Cancel)
                          } else {
                              print("browser can not url. allow it to open locally")
                              decisionHandler(.Allow)
                          }
              } else {
                  print("Open it locally")
                  decisionHandler(.Allow)
              }
          } else {
              print("not a user click")
              decisionHandler(.Allow)
          }
      }
  
  }
  </code></pre>
  
  <p>Any suggestions? Thanks in advance.</p>
  
  <p>EDIT: attached entire ViewController rather than snippet of code.</p>
  
  <p>EDIT2: Answer by k8mil was close as his answer didnt load the initial URL. Below is the only adjustment from his answer:</p>
  
  <pre><code>private func createWebView() {
          guard let url = NSURL(string: "http://communionchapelefca.org/app-home") else { return }
          let frame  = UIScreen.mainScreen().bounds // or different frame created using CGRectMake(x,y,width,height)
          self.webView = WKWebView(frame: frame)
          self.webView.navigationDelegate = self
          self.webView.loadRequest(NSURLRequest(URL: url))
          self.view.addSubview(self.webView)
      }
  </code></pre>