转到iOS中UIWebView中的上一个本地html

时间:2016-11-27 15:05:39

标签: html ios swift uiwebview

在我的项目中有很多html文件,它们通过锚链接相互连接。 所有的html文件都是在UITableView中由UIWebView选中后显示的。加载后,锚链接起作用,用户可以转到所选的html。 现在问题出现在想要回去的时候,因为无论我做什么,导航栏中的后退按钮都会将我们带到tableView而不是之前的html。 如何添加后退按钮,我如何知道在任何给定时间通过UIWebView看到哪些HTML?

import UIKit

class DisplayViewController: UIViewController, UIWebViewDelegate {


var articleName = “”
@IBOutlet var webView: UIWebView!


override func viewDidLoad() {
    super.viewDidLoad()
    functionOfWebView()


}


func functionOfWebView()
{

    let URL = Bundle.main.url(forResource: "\(articleName)", withExtension: "html")
    let request = NSURLRequest(url: URL! as URL)
    webView.loadRequest(request as URLRequest)



}

3 个答案:

答案 0 :(得分:2)

您可以通过将webView的“goBack”操作链接到UIButton来轻松实现此目的。

我假设您在同一个webView中的html文件之间导航。

  • 从故事板中选择webView,然后选择“Connections Inspector”:

enter image description here

  • 请注意,“已接收操作”列表中有“goBack”选项;从其圆圈拖动到按钮:

enter image description here

现在,按钮不应弹出当前的ViewController,而是应该为您的案例执行所需的功能(返回到webview中的上一个网页)。

答案 1 :(得分:1)

在我的情况下,我做了一个VC的属性isInitialWebPageLoaded,它反映了是否从HTML字符串加载了webView - 这暗示用户确实点击了链接或发生了其他事情。

要知道它何时发生,VC需要符合UIWebViewDelegate协议并实现func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool这样:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    isInitialWebPageLoaded = navigationType != .linkClicked
    return true
}

之后,在调用每个后退按钮操作时,我只需检查:

if webView.canGoBack {
    webView.goBack()
} else if isInitialWebPageLoaded == false {
    webView.loadHTMLString(yourHTMLString, baseURL: nil)
} else {
    navigationController?.popViewController(animated: true)
}

希望它有所帮助。

答案 2 :(得分:0)

你必须在HTML中添加一个唯一的ID,然后再回到" goBack"动作解析html找到ID。