Загрузите локальный html в UIWebView с помощью swift
Это сводит меня с ума этим утром. Я хочу загрузить некоторый локальный html в веб-представление:
class PrivacyController: UIViewController {
@IBOutlet weak var webView:UIWebView!
override func viewDidLoad() {
let url = NSURL(fileURLWithPath: "privacy.html")
let request = NSURLRequest(URL: url!)
webView.loadRequest(request)
}
}
HTML-файл находится в корневой папке моего проекта, но внутри группы. Веб-представление пусто для меня. Есть идеи, что случилось? Я нахожусь на xcode 6.1 и запускаю этот пример на своем iphone 6.
10 ответов:
чтобы получить URL-адреса для ресурсов приложения, вы должны использовать
URLForResource
методNSBundle
класса.Swift 2
let url = NSBundle.mainBundle().URLForResource("privacy", withExtension:"html")
Swift 3
let url = Bundle.main.url(forResource: "privacy", withExtension: "html")
Swift 3: тип safe
@IBOutlet weak var webView: UIWebView! override func viewDidLoad() { super.viewDidLoad() // Adding webView content do { guard let filePath = Bundle.main.path(forResource: "myFile", ofType: "html") else { // File Error print ("File reading error") return } let contents = try String(contentsOfFile: filePath, encoding: .utf8) let baseUrl = URL(fileURLWithPath: filePath) webView.loadHTMLString(contents as String, baseURL: baseUrl) } catch { print ("File HTML error") } }
имейте в виду: NS = не Swift:]
// Point UIWebView @IBOutlet weak var webView: UIWebView! override func viewDidLoad() { super.viewDidLoad() //load a file var testHTML = NSBundle.mainBundle().pathForResource("privacy", ofType: "html") var contents = NSString(contentsOfFile: testHTML!, encoding: NSUTF8StringEncoding, error: nil) var baseUrl = NSURL(fileURLWithPath: testHTML!) //for load css file webView.loadHTMLString(contents, baseURL: baseUrl) }
добавьте локальный html-файл в свой проект, назовите его как home.html, затем создайте NSURLRequest с помощью объекта NSURL, затем передав запрос в webview, он загрузит запрошенный URL-адрес в webview, и если вы не используете раскадровку, добавьте uiwebview в представление viewcontroller, как показано ниже.
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let localfilePath = NSBundle.mainBundle().URLForResource("home", withExtension: "html"); let myRequest = NSURLRequest(URL: localfilePath!); myWebView.loadRequest(myRequest); self.view.addSubview(myWebView) }
для получения дополнительной информации, пожалуйста, обратитесь к этому http://sourcefreeze.com/uiwebview-example-using-swift-in-ios/
Swift версии 2.1
этот случай также включает кодировку
// load HTML String with Encoding let path = NSBundle.mainBundle().pathForResource("policy", ofType: "html") do { let fileHtml = try NSString(contentsOfFile: path!, encoding: NSUTF8StringEncoding) webView.loadHTMLString(fileHtml as String, baseURL: nil) } catch { }
Swift 3 С 3 строки :)
if let url = Bundle.main.url(forResource: "privacy", withExtension: "html") { webview.loadRequest(URLRequest(url: url)) }
это работает для меня:
@IBOutlet weak var mWebView: UIWebView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. mWebView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("fineName", ofType: "html")!))) }
добавил
App Transport Security Settings
СDictionary
тип информация.файл plist. Также добавлен дополнительный ключAllow Arbitrary Loads
на Настройки Безопасности Транспорта Приложения С типомBoolean
и значениеYES
.здесь учебник.
редактировать
Для Swift 3 (Xcode 8)
mWebView.loadRequest(URLRequest(url: URL(fileURLWithPath: Bundle.main.path(forResource: "test/index", ofType: "html")!)))
вы можете загрузить HTML-строку или локальный html-файл в UIWebView.
HTML-строку:
func loadHtmlCode() { let htmlCode = "<html><head><title>Wonderful web</title></head> <body><p>wonderful web. loading html code in <strong>UIWebView</strong></></body>" webView.loadHTMLString(htmlCode, baseURL: nil) }
HTML-файл:
func loadHtmlFile() { let url = NSBundle.mainBundle().URLForResource("contactus", withExtension:"html") let request = NSURLRequest(URL: url!) webView.loadRequest(request) }
подробности можно найти здесь: http://webindream.com/load-html-uiwebview-using-swift/
для swift 3 Используйте это:
do { let testHTML = Bundle.main.path(forResource: "about", ofType: "html") let contents = try NSString(contentsOfFile: testHTML!, encoding: String.Encoding.utf8.rawValue) let baseUrl = NSURL(fileURLWithPath: testHTML!) //for load css file mWebView.loadHTMLString(contents as String, baseURL: baseUrl as URL) } catch { }
это сработало для меня (Xcode 8, Swift 3)
@IBOutlet слабый var webViewer: UIWebView!
override func viewDidLoad() { super.viewDidLoad() let localfilePath = Bundle.main.url(forResource: "homeInfo", withExtension: "html"); let myRequest = NSURLRequest(url: localfilePath!); webViewer.loadRequest(myRequest as URLRequest); self.view.addSubview(webViewer) }