自我控制器无webview

时间:2017-05-19 10:51:42

标签: ios swift firebase webview firebase-cloud-messaging

我对Swift开发或iOS开发很新。 我正在创建一个应用程序,主要是使用默认URL显示webview,并使用firebase设置以发送带有URL的通知以更改该webview。

到目前为止,我已成功:

  • 通过firebase成功接收通知,并使用网址传递密钥;
  • 使用可达性显示警报,以防用户忘记打开wifi;
  • 使用progressIndicator

除了更改webView网址外,所有这一切都顺利进行。

这是我的viewDidAppear

class ViewController: UIViewController, UIWebViewDelegate {

@IBOutlet var webView: UIWebView!
@IBOutlet weak var progressIndicator: UIActivityIndicatorView!
@IBOutlet weak var fakeLogo: UIImageView!

let reachability = Reachability()!

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewDidAppear(_ animated: Bool){

    if reachability.isReachable {
        if reachability.isReachableViaWiFi {
            print("Reachable via WiFi")
        } else {
            print("Reachable via Cellular")
        }

        let myUrl = NSURL(string:"https://www.btp.pt")
        let myRequest = NSURLRequest(url: myUrl! as URL);

        webView.delegate = self
        webView.loadRequest(myRequest as URLRequest)

    } else {
        //print("Network not reachable")
        let alert = showNetworkDialogHelper()
        alert.showNetworkDialog(fromController: self)
    }

}

这是我的changeUrl函数,也在ViewController

    func changeWebviewURL(url: String) {
    print("changeWebviewURL : \(url)")

    //print(self.webView) returns nil and
    //fatal error: unexpectedly found nil while unwrapping an Optional value

    let stringUrl = url
    let requestUrl = URL(string: stringUrl);
    let myRequestUrl = URLRequest(url: requestUrl! as URL);
    self.webView!.loadRequest(myRequestUrl)

}

这个函数中self.webView的简单打印返回给我一个零。这就是我一直在努力克服但却无法克服的。

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

这里有一些为Swift 3更新的ViewController代码,并且已经过测试。我已经省略了Reachability var,因为这可能是问题的原因,并且在问题中未定义。

您会注意到我在故事板中为视图添加了一个按钮,其中的操作可以更改webView指向的URL。

class ViewController: UIViewController, UIWebViewDelegate {

   @IBOutlet weak var webView: UIWebView!

   @IBAction func buttonAction(_ sender: Any) {
       self.changeWebviewURL(url: "http://www.apple.com")
   }

   override func viewDidLoad() {
       super.viewDidLoad()

       let url = URL(string: "https://www.google.com")
       let request = URLRequest(url: url!)
       self.webView.loadRequest(request)
       self.webView.delegate = self
   }

   func changeWebviewURL(url: String) {
       print("changeWebviewURL : \(url)")

       let myUrl = URL(string: url)
       let request = URLRequest(url: myUrl!)
       self.webView.loadRequest(request)
       print(self.webView)
   }

   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
   }
}