WKWebView 委托问题(Xcode 7.3 使用 Swift)

WKWebView delegate issue (Xcode 7.3 using Swift)

我正在创建一个本质上是网络视图的应用程序。它使用不能在常规网络应用程序中使用的自定义专有字体,因此是应用程序包装器。

它在大多数情况下工作正常,但我想检查 URL 请求是否正确加载,发送 'page not found' 消息或一些类似的消息,当给出错误的 URL 或URL 加载失败。为此,我认为我需要一名代表。

问题:每次我尝试创建委托(尽管尝试了我在示例中看到的几种方法)时,应用程序都会在加载时崩溃。

(顺便说一句:如果我以编程方式而不是在情节提要中创建 webview,则不会加载自定义字体,就我而言,这是主要要求的失败。如果您有解决方案)

代码:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

@IBOutlet var containerView: UIView!
var screenEdgeRecognizer: UIScreenEdgePanGestureRecognizer!
//var currentRadius:CGFloat = 0.0

@IBOutlet var webView: WKWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    screenEdgeRecognizer = UIScreenEdgePanGestureRecognizer(target: self,
        action: #selector(ViewController.goBack(_:)))
    screenEdgeRecognizer.edges = .Left
    view.addGestureRecognizer(screenEdgeRecognizer)

    // *** This line commented out to prevent app from crashing!
    //self.webView.navigationDelegate = self

    webView.hidden = false;
    // this allows the UIWebView box to your background color seamlessly.
    webView.opaque = false;

    // Do any additional setup after loading the view, typically from a nib.
    let url = NSURL (string: "http://localhost/web_app/mobile_login.php");

    let requestObj = NSURLRequest(URL: url!);

    //let localfilePath = NSBundle.mainBundle().URLForResource("home", withExtension: "html");
    //let requestObj = NSURLRequest(URL: localfilePath!);
    webView.loadRequest(requestObj);
    //webView.allowsBackForwardNavigationGestures = true;

}

// **** This code I hope to use but I think requires a delegate in order to work
func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
    let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .Alert)
    alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
    presentViewController(alert, animated: true, completion: nil)
}

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

override func preferredStatusBarStyle() -> UIStatusBarStyle {

    //LightContent
    return UIStatusBarStyle.LightContent

    //Default
    //return UIStatusBarStyle.Default

}

func goBack(sender: UIScreenEdgePanGestureRecognizer) {
    //

    self.webView.goBack()

}

}

非常感谢您的建议。

据我所知,您还不能在 Interface Builder 中创建 WKWebView。我相信它必须以编程方式创建。您是否在情节提要中使用 UIWebView 并尝试将插座设置为 WKWebView?如果是这样,这就是它崩溃的原因。它们完全是不同的对象。

如果必须在 Storyboard 中构建,可以尝试使用 UIWebView。但我不知道为什么 WKWebView 在以编程方式创建时会有任何不同的行为(首先它不能在 IB 中创建)。

上面 Mike Cole 的回答直击了我的问题所在。但仅供参考,在进一步调查中,我发现了这个 question,它查看自定义字体以及将它们与 WKWebViews

一起使用的困难