我的WebView存在一个小问题。这就是我在我的应用程序中所做的:
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet var webView: WKWebView! // draged from storyboard
override func viewDidLoad() {
super.viewDidLoad()
var urlToLoad : (String)
urlToLoad = "http://wwww.myapp.com"
webView.sizeToFit()
webView.isUserInteractionEnabled = true
let url = URL(string: urlToLoad)
let request = URLRequest(url:url!)
//webView.navigationDelegate = self
webView.load(request)
}
当你看到行" webView.navigationDelegate = self"被评论。如果我取消注释它,我的应用程序将在启动时崩溃并告诉我:
调试程序 :libc ++ abi.dylib:以NSException类型的未捕获异常终止
知道为什么会发生这种情况以及如何解决这个问题?我需要这个才能使用" didFinish navigation"等方法。我已经在页面中实现了但它们从未被调用过。
另外,通过查看我的代码......您会看到我应该更改有关使用我的网页视图的任何内容吗?
感谢您帮助我。
答案 0 :(得分:2)
您正在使用UIWebView并尝试调用WKWebView的方法,这会因UIWebView上无法识别的选择器发送而导致应用程序崩溃。
尝试创建新项目并使用下面提到的代码。
将“WebKit”框架导入您的班级。
override func viewDidLoad() {
super.viewDidLoad()
let myWebView:WKWebView = WKWebView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
myWebView.navigationDelegate = self;
let url = URL(string: "https://www.Apple.com")!
myWebView.load(URLRequest(url: url))
self.view.addSubview(myWebView)
}
然后实现WKNavigationDelegate方法
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
let url = webView.url
print(url as Any) // this will print url address as option field
if url?.absoluteString.range(of: ".pdf") != nil {
pdfBackButton.isHidden = false
print("PDF contain")
}
else {
pdfBackButton.isHidden = true
print("No PDF Contain")
}
}
希望这会对你有帮助!
答案 1 :(得分:1)
您正在将UIWebView
绑定到WKWebView
类型的属性。因此,当尝试在navigationDelegate
上调用UIWebView
时,它会崩溃,因为它不提供此方法。
Storyboard中没有可用的WKWebView模板版本,因此您必须以编程方式创建WKWebView
:
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView(frame: view.frame)
webView.navigationDelegate = self
view.addSubview(webView)
let url = URL(string: "https://www.google.com")!
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true
}
答案 2 :(得分:0)
您没有初始化webView
。该应用程序崩溃,因为它是nil
。
您需要将其绑定到storyboard或xib文件(取消注释@IBOutlet
)或以编程方式对其进行初始化,然后将其添加到viewController's
view
。
答案 3 :(得分:0)
我收到错误Value of type '(WKWebView, WKNavigation?) -> ()' has no member 'navigationDelegate'
(我猜这与添加webView.navigationDelegate = self
时导致崩溃的原因相同)。
我发现视图控制器类需要通过将其添加到类定义中来实现WKNavigationDelegate
协议(有点像继承),从而为我解决了错误。确保具有此代码第一行中的内容:
class ViewController: UIViewController, WKNavigationDelegate {
// ...
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
// ...
}
}