【问题标题】:How do I correctly disable link detection in UIWebView?如何正确禁用 UIWebView 中的链接检测?
【发布时间】:2015-09-14 06:21:34
【问题描述】:

我有一个 UIWebView 严格用于查看 PDF,我不希望在视图中进行任何链接检测,像这样:

所以我添加了以下代码来否定链接的检测和该视图的呈现:

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
            }
        }
    }

【问题讨论】:

  • 这不起作用@KiritModi
  • 您在 WebView Delegate 中添加以下代码
  • 检查我更新的问题,添加我当前的代码@KiritModi
  • 告诉我你的 pdf 的 URL 是什么
  • 为什么,我有数百个 @KiritModi 而不仅仅是一个

标签: ios xcode swift uiwebview


【解决方案1】:

如果您的 webview 是由故事板添加的,您可以在属性检查器中禁用它。

[1

【讨论】:

    【解决方案2】:

    这是一个 Objective-c 代码,但你可以在 Swift 中做同样的事情。它将修复与链接的交互。缺点是它们仍然会被检测到。

    - (BOOL)webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if (inType == UIWebViewNavigationTypeLinkClicked) {
        return NO;
    }
    return YES;
    

    }

    【讨论】:

    • 还会出现那个模态提示吗?
    • 好吧,我认为不应该,但如果我错了,请纠正我。
    • 修复了与链接的交互
    • 但是当我按住链接时,提示仍然显示
    【解决方案3】:

    为您精细解决问题,

    Working Demo

    无法禁用长按链接菜单,这是iOS中的Bug,在iOS 8.2中已解决。

    根据错误,当长按链接然后打开操作表时,现在在 iOS 8.2 中它的解决方法如下。

    使用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)
    
    
        }
    
    }
    

    现在您单击长按链接,然后它不会打开 ActionSheet PopUp。

    享受..!!

    输出:

    【讨论】:

    • 如果我通过UIWebKit 创建我的webView,我将如何使用我所有的UIWebViewDelegate 方法?
    • 因为这些 UIWebViewDelegate 方法有助于跟踪进度加载等
    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多