Ricerca…
Osservazioni
Funzioni del delegato di UIWebView: -
Objective-C Declerations
- (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;
Creare un'istanza UIWebView
veloce
let webview = UIWebView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))
Objective-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;
Fare una richiesta di URL
Carica contenuto in WebView dal url
veloce
webview.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.google.com")!))
Objective-C
[webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
Interrompere il caricamento di contenuto Web
Metodo stopLoading()
interrompe il processo di caricamento corrente della webview.
veloce
webview.stopLoading()
Objective-C
[webview stopLoading];
Ricarica il contenuto Web corrente
veloce
webview.reload()
Objective-C
[webview reload];
Determinazione della dimensione del contenuto
In molti casi, ad esempio quando si utilizzano viste Web in celle di visualizzazione tabella, è importante determinare la dimensione del contenuto della pagina HTML renderizzata. Dopo aver caricato la pagina, questo può essere calcolato nel metodo delegato UIWebViewDelegate
:
- (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);
}
Il codice impiega un ulteriore trucco per impostare brevemente l'altezza della visualizzazione web su 1 prima di misurare la dimensione del raccordo. Altrimenti riporterebbe semplicemente la dimensione attuale del frame. Dopo la misurazione, impostiamo immediatamente l'altezza all'altezza del contenuto effettivo.
Carica una stringa HTML
Le visualizzazioni Web sono utili per caricare stringhe HTML generate localmente.
NSString *html = @"<!DOCTYPE html><html><body>Hello World</body></html>";
[webView loadHTMLString:html baseURL:nil];
veloce
let htmlString = "<h1>My First Heading</h1><p>My first paragraph.</p>"
webView.loadHTMLString(htmlString, baseURL: nil)
È possibile specificare un URL di base locale. È utile per fare riferimento a immagini, fogli di stile o script dal pacchetto di app:
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 questo caso, style.css
viene caricato localmente dalla directory delle risorse dell'app. Ovviamente è anche possibile specificare un URL remoto.
Carica JavaScript
Possiamo eseguire JavaScript personalizzato su un UIWebView
usando il metodo stringByEvaluatingJavaScriptFromString()
. Questo metodo restituisce il risultato dell'esecuzione dello script JavaScript passato nel parametro dello script, o zero se lo script non riesce.
veloce
Carica script da String
webview.stringByEvaluatingJavaScriptFromString("alert('This is JavaScript!');")
Carica lo script dal file locale
//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)
}
Objective-C
Carica script da String
[webview stringByEvaluatingJavaScriptFromString:@"alert('This is JavaScript!');"];
Carica lo script dal file locale
//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];
Nota stringByEvaluatingJavaScriptFromString:
metodo attende in modo sincrono il completamento della valutazione JavaScript. Se carichi contenuti web di cui non hai controllato il codice JavaScript, l'attivazione di questo metodo potrebbe bloccare la tua app. È consigliabile adottare la classe WKWebView
e utilizzare invece il metodo evaluateJavaScript:completionHandler:
. Ma WKWebView
è disponibile da iOS 8.0 e versioni successive.
Carica file di documenti come .pdf, .txt, .doc ecc.
Invece di pagine Web, possiamo anche caricare i file di documento in iOS WebView come .pdf, .txt, .doc ecc. loadData
metodo loadData
viene utilizzato per caricare NSData
in webview.
veloce
//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())
Objective-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]];
Crea collegamenti che all'interno di UIWebview cliccabili
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;
}
Carica il file HTML locale in webView
Innanzitutto, aggiungi il file HTML al tuo progetto (se ti viene chiesto di scegliere le opzioni per aggiungere il file, seleziona Copia gli elementi se necessario )
La seguente riga di codice carica il contenuto del file HTML nel webView
webView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("YOUR HTML FILE", ofType: "html")!})
- Se il tuo file HTML è chiamato index.html, sostituisci il TUO FILE HTML con l' indice
- È possibile utilizzare questo codice in viewDidLoad () o viewDidAppear () o qualsiasi altra funzione