L’oggetto UIWebView è un componente davvero utile e versatile, ideale per risolvere tantissime problematiche. Non solo è perfetto per visualizzare una pagina HTML presente in rete, ma è possibile utilizzarlo per altri utili scopi come:
- Visualizzare velocemente documenti PDF
- Visualizzare Video o immagini
- Visualizzare contenuti HTML/CSS locali
- Contenuti fake in fase di prototipo…
In particolare, quando si visualizza un contenuto HTML/CSS costruito localmente, come una pagina di istruzioni o una tabella riepilogativa, diventa necessario poter interagire con tale visualizzazione. Essendo una pagina HTML quella che viene visualizzata, in essa si possono inserire dei link per richiamare, poi, funzionalità presenti nel nostro codice Objective-C.
Questo è possibile farlo intercettando l’apertura di una “pagina” e analizzando l’url inserito nell’attributo href del tag a. L’evento perfetto che possiamo sfruttare messo a disposizione da UIWebViewDelegate è webView:shouldStartLoadWithRequest:navigationType. Questo messaggio deve restituire YES se l’apertura deve procedere. Se restituisce NO l’azione del controllo UIWebView viene interotta e possiamo entrare in gioco noi.
Nell’esempio mostrato qui sotto, se nel controllo UIWebView è presente un link di questo tipo:
oppure:
Viene bloccata l’apertura della “pagina” (undolog: non è ancora un protocollo registrato
) e il controllo passa a noi potendo, come mostrato nell’esempio, creare un nuovo ViewController e trattare il dato:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // Vedere la documentazione Apple per i vari tipi di navigationType if(navigationType == UIWebViewNavigationTypeOther) { // Eseguire questo controllo se avete usato la seconda forma HTML, quella // con http://undolog.com if( [[[request URL] host] isEqualToString:@"undolog.com"] ) { // Cerco se nella stringa c'è "jpg" NSRange images = [ [[request URL] absoluteString] rangeOfString:@"jpg" ]; if(images.length > 0 ) { DetailViewController *detail = [DetailViewController alloc]; [self.navigationController pushViewController:detail animated:YES]; [detail release]; return NO; // :) } } } return YES; } |








6
Non ci sono commenti per questo Post
Lascia un commento