我正在创建一个基本上是webview的应用程序。它使用不能在常规webapp中使用的自定义专有字体,因此也就是app包装器。
它适用于大多数用途,但我想检查URL请求是否正确加载,以发送未找到的页面'如果给出错误的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()
}
}
非常感谢您的建议。
答案 0 :(得分:1)
据我所知,您还无法在Interface Builder中创建WKWebView
。我认为必须以编程方式创建它。您是否在故事板中使用了UIWebView
并尝试将插座设置为WKWebView
?如果是这样,那就是它崩溃的原因。它们完全是不同的对象。
如果您必须在Storyboard中构建它,可以尝试使用UIWebView。但是我不知道为什么WKWebView
在以编程方式创建时会有任何不同的行为(首先它不能在IB中创建)。
答案 1 :(得分:0)