Zoeken…
Opmerkingen
UIWebView Delegate-functies: -
Objective-C-decleraties
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType;
- (void)webView:(UIWebView *)webView
didFailLoadWithError:(NSError *)error;
- (void)webViewDidFinishLoad:(UIWebView *)webView;
- (void)webViewDidStartLoad:(UIWebView *)webView;
Maak een UIWebView-instantie
Snel
let webview = UIWebView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))
Doelstelling C
UIWebView *webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
//Alternative way of defining frame for UIWebView
UIWebView *webview = [[UIWebView alloc] init];
CGRect webviewFrame = webview.frame;
webviewFrame.size.width = 320;
webviewFrame.size.height = 480;
webviewFrame.origin.x = 0;
webviewFrame.origin.y = 0;
webview.frame = webviewFrame;
Een URL aanvraag doen
Laad inhoud in webview vanuit de url
Snel
webview.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.google.com")!))
Doelstelling C
[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
Stop met het laden van webinhoud
Methode stopLoading()
stopt het huidige laadproces van de webview.
Snel
webview.stopLoading()
Doelstelling C
[webview stopLoading];
Huidige webinhoud opnieuw laden
Snel
webview.reload()
Doelstelling C
[webview reload];
Inhoud bepalen
In veel gevallen, bijvoorbeeld bij het gebruik van webweergaven in tabelweergavecellen, is het belangrijk om de inhoudsgrootte van de gerenderde HTML-pagina te bepalen. Na het laden van de pagina kan dit worden berekend met de UIWebViewDelegate
delegatiemethode:
- (void) webViewDidFinishLoad:(UIWebView *) aWebView {
CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
aWebView.frame = frame;
NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);
}
De code gebruikt een extra truc om de hoogte van het webaanzicht kort in te stellen op 1 voordat de pasmaat wordt gemeten. Anders zou het gewoon de huidige framegrootte weergeven. Na het meten stellen we de hoogte onmiddellijk in op de werkelijke inhoudshoogte.
Laad HTML-string
Webweergaven zijn handig om lokaal gegenereerde HTML-reeksen te laden.
NSString *html = @"<!DOCTYPE html><html><body>Hello World</body></html>";
[webView loadHTMLString:html baseURL:nil];
Snel
let htmlString = "<h1>My First Heading</h1><p>My first paragraph.</p>"
webView.loadHTMLString(htmlString, baseURL: nil)
Er kan een lokale basis-URL worden opgegeven. Dit is handig om te verwijzen naar afbeeldingen, stylesheets of scripts uit de app-bundel:
NSString *html = @"<!DOCTYPE html><html><head><link href='style.css' rel='stylesheet' type='text/css'></head><body>Hello World</body></html>";
[self loadHTMLString:html baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] resourcePath]]];
In dit geval wordt style.css
lokaal geladen vanuit de style.css
van de app. Natuurlijk is het ook mogelijk om een externe URL op te geven.
Laad JavaScript
We kunnen aangepast JavaScript op een UIWebView
met de methode stringByEvaluatingJavaScriptFromString()
Deze methode retourneert het resultaat van het uitvoeren van het JavaScript-script dat is doorgegeven in de scriptparameter, of nul als het script mislukt.
Snel
Laad script uit String
webview.stringByEvaluatingJavaScriptFromString("alert('This is JavaScript!');")
Laad script uit lokaal bestand
//Suppose you have javascript file named "JavaScript.js" in project.
let filePath = NSBundle.mainBundle().pathForResource("JavaScript", ofType: "js")
do {
let jsContent = try String.init(contentsOfFile: filePath!, encoding: NSUTF8StringEncoding)
webview.stringByEvaluatingJavaScriptFromString(jsContent)
}
catch let error as NSError{
print(error.debugDescription)
}
Doelstelling C
Laad script uit String
[webview stringByEvaluatingJavaScriptFromString:@"alert('This is JavaScript!');"];
Laad script uit lokaal bestand
//Suppose you have javascript file named "JavaScript.js" in project.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"JavaScript" ofType:@"js"];
NSString *jsContent = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
[webview stringByEvaluatingJavaScriptFromString:jsContent];
Opmerking De stringByEvaluatingJavaScriptFromString:
methode wacht synchroon totdat de JavaScript-evaluatie is voltooid. Als u webinhoud laadt waarvan u de JavaScript-code niet hebt gecontroleerd, kan uw app worden opgehangen als u deze methode gebruikt. Het wordt WKWebView
om de WKWebView
klasse over te nemen en in plaats daarvan de methode WKWebView
evaluateJavaScript:completionHandler:
te gebruiken. Maar WKWebView
is beschikbaar vanaf iOS 8.0 en hoger.
Laad documentbestanden zoals .pdf, .txt, .doc etc.
In plaats van webpagina's kunnen we ook de documentbestanden in iOS WebView laden, zoals .pdf, .txt, .doc enz. loadData
methode loadData
wordt gebruikt om NSData
in webview te laden.
Snel
//Assuming there is a text file in the project named "home.txt".
let localFilePath = NSBundle.mainBundle().pathForResource("home", ofType:"txt");
let data = NSFileManager.defaultManager().contentsAtPath(localFilePath!);
webview.loadData(data!, MIMEType: "application/txt", textEncodingName:"UTF-8" , baseURL: NSURL())
Doelstelling C
//Assuming there is a text file in the project named "home.txt".
NSString *localFilePath = [[NSBundle mainBundle] pathForResource:@"home" ofType:@"txt"];
NSData *data = [[NSFileManager defaultManager] contentsAtPath:localFilePath];
[webview loadData:data MIMEType:@"application/txt" textEncodingName:@"UTF-8" baseURL:[NSURL new]];
Maak koppelingen binnen UIWebview klikbaar
In vc.h
@interface vc : UIViewController<UIWebViewDelegate>
in vc.m
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
if (navigationType == UIWebViewNavigationTypeLinkClicked){
//open it on browser if you want to open it in same web view remove return NO;
NSURL *url = request.URL;
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
return NO;
}
return YES;
}
Laad lokaal HTML-bestand in webView
Voeg eerst het HTML-bestand toe aan uw project (als u wordt gevraagd om opties te kiezen voor het toevoegen van het bestand, selecteert u Items kopiëren indien nodig )
De volgende coderegel laadt de inhoud van het HTML-bestand in de webView
webView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("YOUR HTML FILE", ofType: "html")!})
- Als uw HTML-bestand index.html wordt genoemd, vervang dan UW HTML-BESTAND door index
- U kunt deze code gebruiken in viewDidLoad () of viewDidAppear () of een andere functie