Celui-ci me rend fou ce matin. Je veux charger du code HTML local dans une vue Web:
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)
}
}
Le fichier html se trouve dans le dossier racine de mon projet mais se trouve dans un groupe La vue Web est vide pour moi. Des idées ce qui ne va pas? Je suis sur xcode 6.1 et lance cet exemple sur mon iphone 6.
Pour récupérer les URL des ressources d'application, vous devez utiliser la méthode URLForResource
de la classe NSBundle
.
Swift 2
let url = NSBundle.mainBundle().URLForResource("privacy", withExtension:"html")
Swift 3
let url = Bundle.main.url(forResource: "privacy", withExtension: "html")
Swift 3: tapez 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")
}
}
Gardez à l'esprit: NS = Not 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)
}
Swift 3 avec3lignes :)
if let url = Bundle.main.url(forResource: "privacy", withExtension: "html") {
webview.loadRequest(URLRequest(url: url))
}
Swift version 2.1
ce cas inclut également le codage
// 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 {
}
Ajoutez le fichier HTML local à votre projet et nommez-le home.html, puis créez l'objet NSURLRequest à l'aide de l'objet NSURL. Après avoir transmis la demande à la vue Web, l'URL demandée sera chargée dans la vue Web. Si vous n'utilisez pas de storyboard, ajoutez uiwebview à la vue du contrôleur de la vue, comme le code ci-dessous.
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)
}
Pour plus de références s'il vous plaît se référer à ceci http://sourcefreeze.com/uiwebview-example-using-Swift-in-ios/
Cela a fonctionné pour moi:
@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")!)))
}
Ajout de App Transport Security Settings
avec Dictionary
dans le fichier info.plist. Également ajouté la sous-clé Allow Arbitrary Loads
pour App Transport Security Settings avec le type Boolean
et la valeur YES
.
Ici est un tutoriel.
ÉDITÉ
Pour Swift 3 (Xcode 8)
mWebView.loadRequest(URLRequest(url: URL(fileURLWithPath: Bundle.main.path(forResource: "test/index", ofType: "html")!)))
Vous pouvez charger une chaîne html ou un fichier html local dans UIWebView.
Chaîne 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)
}
Fichier HTML:
func loadHtmlFile() {
let url = NSBundle.mainBundle().URLForResource("contactus", withExtension:"html")
let request = NSURLRequest(URL: url!)
webView.loadRequest(request)
}
Les détails sont disponibles ici: http://webindream.com/load-html-uiwebview-using-Swift/
Pour Swift 3, utilisez ceci:
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
{
}
Cela a fonctionné pour moi (Xcode 8, Swift 3)
@IBOutlet faible 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)
}
Swift 4.2, Xcode 10.1, WKWebView charge le HTML à partir d'un fichier. UIWebView est obsolète.
Dans les applications qui s'exécutent dans iOS 8 et versions ultérieures, utilisez la classe WKWebView au lieu d'utiliser UIWebView.
import WebKit
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let localFilePath = Bundle.main.url(forResource: "document_terms_of_use", withExtension: "html")
let request = NSURLRequest(url: localFilePath!)
webView.load(request as URLRequest)
}
Swift 4.2 & 5:
let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 1024, height: 768))
let url = URL(string: PERS_Path)
webView?.navigationDelegate = self
webView?.uiDelegate = self
webView!.loadFileURL(url!, allowingReadAccessTo: url!)
self.view. addSubview(webView)
n'oubliez pas d'ajouter ce WKNavigationDelegate, WKUIDelegate
Voici une version succincte de Swift 4
1) Ajouter import import WebKit
2) Ajoutez WebKit.framework
dans votre projet
@IBOutlet weak var webView: WKWebView!
if let filePath = Bundle.main.url(forResource: "FILE_NAME", withExtension: "html") {
let request = NSURLRequest(url: filePath)
webView.load(request as URLRequest)
}