Ios 如何在UIWebView中正确禁用链接检测?
我有一个严格用于查看PDF的UIWebView,我不希望在视图中检测任何链接,如下所示: 因此,我添加了以下代码来否定对链接的检测和该视图的显示:Ios 如何在UIWebView中正确禁用链接检测?,ios,xcode,swift,uiwebview,Ios,Xcode,Swift,Uiwebview,我有一个严格用于查看PDF的UIWebView,我不希望在视图中检测任何链接,如下所示: 因此,我添加了以下代码来否定对链接的检测和该视图的显示: override func viewDidLoad() { super.viewDidLoad() myWebView.dataDetectorTypes = UIDataDetectorTypes.None } 然而,它仍然会拾取链接,并呈现这种模式视图。如何正确地实现代码来阻止这种情况 这是我的更新
override func viewDidLoad() {
super.viewDidLoad()
myWebView.dataDetectorTypes = UIDataDetectorTypes.None
}
然而,它仍然会拾取链接,并呈现这种模式视图。如何正确地实现代码来阻止这种情况
这是我的更新代码:
class PdfViewController: UIViewController, UIWebViewDelegate {
@IBOutlet var myWebView: UIWebView!
var contentUrlPassedOn: String!
var allowLoad = true
override func viewDidLoad() {
super.viewDidLoad()
myWebView.delegate = self
let url: NSURL! = NSURL(string: contentUrlPassedOn)
myWebView.loadRequest(NSURLRequest(URL: url))
myWebView.dataDetectorTypes = UIDataDetectorTypes.None
}
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
return allowLoad
}
func webViewDidStartLoad(webView: UIWebView) {
var hasFinishedLoading = false
updateProgress()
}
func webViewDidFinishLoad(webView: UIWebView) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1.0 * Double(NSEC_PER_SEC))),
dispatch_get_main_queue()) {
[weak self] in
if let _self = self {
_self.hasFinishedLoading = true
self!.allowLoad = false
}
}
}
为您精心解决问题 无法禁用长按链接菜单,这是iOS中的错误,iOS 8.2解决了这个问题 根据bug,当按下link上的long键时,它就会打开动作表,现在在iOS 8.2中,它的解决方法如下
import UIKit
import WebKit
class ViewController: UIViewController , WKUIDelegate {
var webView: WKWebView?
override func loadView() {
super.loadView()
self.webView = WKWebView()
self.view = self.webView
}
override func viewDidLoad() {
super.viewDidLoad()
super.viewDidLoad()
var url = NSURL(string:"http://www.nursing.umich.edu/studentresources/documentation/CreatingBookmarksPDFdocsV7.pdf")
var req = NSURLRequest(URL:url!)
self.webView!.loadRequest(req)
}
}
使用WKWebView
加载PDF,如下所示
import UIKit
import WebKit
class ViewController: UIViewController , WKUIDelegate {
var webView: WKWebView?
override func loadView() {
super.loadView()
self.webView = WKWebView()
self.view = self.webView
}
override func viewDidLoad() {
super.viewDidLoad()
super.viewDidLoad()
var url = NSURL(string:"http://www.nursing.umich.edu/studentresources/documentation/CreatingBookmarksPDFdocsV7.pdf")
var req = NSURLRequest(URL:url!)
self.webView!.loadRequest(req)
}
}
现在你点击你的长按链接,然后它不会打开操作表弹出窗口
享受
输出:
这是一个objective-c代码,但在Swift中也可以这样做。它将修复与链接的交互。缺点是它们仍然会被检测到
- (BOOL)webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if (inType == UIWebViewNavigationTypeLinkClicked) {
return NO;
}
return YES;
}如果您的网络视图是由情节提要添加的,您可以在属性检查器中禁用此功能
[这不起作用@KiritModi你在WebView Delegate中添加了下面的代码检查我的更新问题,添加了我的当前代码@KiritModi给我你的pdfwhy的URL是什么,我有数百个@KiritModi不仅仅是一个,它还会显示模式提示吗?嗯,我认为不应该,但如果我错了,请纠正我。它修复了与h链接显示每当我按住链接时,提示仍然显示如果我通过
UIWebKit
创建我的webView,我将如何使用所有UIWebViewDelegate
方法?因为这些UIWebViewDelegate
方法有助于跟踪加载进度