Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在UIWebView中正确禁用链接检测?_Ios_Xcode_Swift_Uiwebview - Fatal编程技术网

Ios 如何在UIWebView中正确禁用链接检测?

Ios 如何在UIWebView中正确禁用链接检测?,ios,xcode,swift,uiwebview,Ios,Xcode,Swift,Uiwebview,我有一个严格用于查看PDF的UIWebView,我不希望在视图中检测任何链接,如下所示: 因此,我添加了以下代码来否定对链接的检测和该视图的显示: override func viewDidLoad() { super.viewDidLoad() myWebView.dataDetectorTypes = UIDataDetectorTypes.None } 然而,它仍然会拾取链接,并呈现这种模式视图。如何正确地实现代码来阻止这种情况 这是我的更新

我有一个严格用于查看PDF的UIWebView,我不希望在视图中检测任何链接,如下所示:

因此,我添加了以下代码来否定对链接的检测和该视图的显示:

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
方法有助于跟踪加载进度