如何在iOS Swift中将本地HTML文件加载到字符串变量中?

10
我想把本地的HTML文件加载到一个字符串变量中,但我不知道该如何做。请帮帮我。 我找到了下面的链接,但它是从在线URL加载的。 Swift和UIWebView元素隐藏
5个回答

20
将HTML复制到您的项目目录中,并使用以下代码:

将HTML复制到您的项目目录中,并使用以下代码:

@IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
    super.viewDidLoad()

        var htmlFile = NSBundle.mainBundle().pathForResource("MyHtmlFile", ofType: "html")
        var htmlString = try? String(contentsOfFile: htmlFile!, encoding: NSUTF8StringEncoding)
        webView.loadHTMLString(htmlString!, baseURL: nil)


}

我有点困惑。确切的路径在哪里定义?我是一个Swift和Xcode的新手:/ 但是我无法弄清楚...也许:如何在Xcode项目中加载文件以便以这种方式定位它? - Tomas Javurek
@ Tomas Javurek,只需将您的文件拖放到项目文件夹中即可。 - Rizwan Shaikh
1
@RizwanShaikh 我是凭直觉这么做的。我已经在我的Xcode项目中有 'default.html',并尝试以这种方式加载它 let htmlFile = Bundle.main.path(forResource: "default", ofType: "html")。该文件也是编译包的一部分,并位于资源文件夹中。但当我尝试获取文件内容时,它会产生错误。我还尝试打印解包后的htmlFile的值,但返回了 nil …所以我的问题出在其他地方…您有任何想法我做错了什么吗? - Tomas Javurek
1
我通过以下代码解决了问题:let bundle = Bundle(for: MyView.self) let url = bundle.url(forResource:"default", withExtension:"html") let request = URLRequest(url: url!) self.webView.load(request) - Tomas Javurek
@TomasJavurek,你是我的英雄。你应该把它作为一个答案添加进去。 - ScottyBlades

6

在 Swift 3 中:

    let htmlFile = Bundle.main.path(forResource:"MyHtmlFile", ofType: "html")
    let htmlString = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
    webView.loadHTMLString(htmlString!, baseURL: nil)

我建议使用可选链代替上面的强制解包htmlString


1
你可以编写类似这样的实用方法,获取HTML字符串并将其加载到Webview中。这里我使用了URL方法。
   private func getHTML() -> String {
        var html = ""
        if let htmlPathURL = Bundle.main.url(forResource: "test", withExtension: "html"){
            do {
                html = try String(contentsOf: htmlPathURL, encoding: .utf8)
            } catch  {
                print("Unable to get the file.")
            }
        }

        return html
    }

0

简单回答

 let indexPath = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "/")
        if let indexPath = indexPath
        {
            do
            {
                let htmlContent = try String(contentsOfFile: indexPath, encoding: String.Encoding.utf8)

                let base = Bundle.main.resourceURL 
                self.webView.loadHTMLString(htmlContent, baseURL: base)

            }
            catch let err as NSError
            {
                print(err.debugDescription)
            }
        }

0

Swift 3 语法:

    guard
        let file = Bundle.main.path(forResource: "agreement", ofType: "html"), 
        let html = try? String(contentsOfFile: file, encoding: String.Encoding.utf8)
    else {
        return
    }
    webView.loadHTMLString(html, baseURL: nil)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接