在 SFSafariViewController 上打开 WebView 链接

Posted

技术标签:

【中文标题】在 SFSafariViewController 上打开 WebView 链接【英文标题】:Open WebView Links on SFSafariViewController 【发布时间】:2015-11-25 19:04:35 【问题描述】:

应用程序在 UIWebView 中打开文章,我需要在 SFSafariViewController 上打开这些文章的链接(这是强制性的)。到目前为止,它将在 webview 上打开并破坏我的用户体验。我的 WebView 加载 html 字符串并加载内容,如下所示。

override func viewWillAppear(animated: Bool) 
    super.viewWillAppear(animated)
    self.webView.loadHTMLString(article.content, baseURL: nil)

有了内容,就会出现链接,如下图所示。 screenshot of the app

如何使我的文章的这些链接在 SFSafariViewController 上打开?由于它来自 HTML 字符串并且我不知道文章链接 url,我该怎么办?

【问题讨论】:

UIWebView =),对不起...编辑错误 【参考方案1】:

那行得通。创建一个名为 allowLoad 的 Bool 变量以允许或不允许加载 webview 内容。在 webview 上加载文章后,allowLoad 将变为 false,因此下一个请求只能在链接触摸时开始,然后它将显示 SFSafariViewController(我不知道你是否理解,所以你可以问我任何问题)

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool 

    if (navigationType == UIWebViewNavigationType.LinkClicked)
        let url = request.URL;

        if #available(ios 9.0, *) 
            let sfViewController = SFSafariViewController(URL:url!, entersReaderIfAvailable: true)

            self.presentViewController(sfViewController, animated: true, completion:  () -> Void in
                print("May the force be with you!")
            )
         else 

        
    

    return allowLoad


func webViewDidFinishLoad(webView: UIWebView) 
    return allowLoad = false

【讨论】:

以上是关于在 SFSafariViewController 上打开 WebView 链接的主要内容,如果未能解决你的问题,请参考以下文章

FBSDK 登录 - SFSafariViewController 已禁用?

SFSafariViewController 详细信息

是否可以在 UITabBarController 内显示 SFSafariViewController?

在 SFSafariViewController 上设置完成按钮颜色

在 SFSafariViewController 中嵌入 Javascript

Android 相当于 iOS 的 SFSafariViewController