Post on 11-Jan-2020
© Santiago Pavón - UPM-DIT
Desarrollo de Apps para iOS Web Views
IWEB 2015-2016Santiago Pavón
ver: 2015.11.16
1
© Santiago Pavón - UPM-DIT
UIWebView
Es una UIView que contiene una navegador web.
Puede mostrar distintos tipos de contenido:- URL de una página web remota.- string conteniendo HTML.- bytes + tipo MIME.
PDFs.
Basado en WebKit - Proyecto Open Source- funcionalidad limitada- Soporta JavaScript (límite almacenamiento 10 MB).
2
© Santiago Pavón - UPM-DIT
Mostrar Contenidos
Petición asíncrona a un URL:
func loadRequest(_ request: NSURLRequest)
Carga un string conteniendo HTML:
func loadHTMLString(_ string: String, baseURL baseURL: NSURL?)
Carga bytes:
func loadData(_ data: NSData, MIMEType MIMEType: String, textEncodingName textEncodingName: String, baseURL baseURL: NSURL)
3
© Santiago Pavón - UPM-DIT
Ejemplos
let webView = UIWebView() if let url = NSURL(string: "http://www.upm.es") { let req = NSURLRequest(URL: url)
webView.loadRequest(req)} webView.loadHTMLString("<a href='upm.es'>UPM</a>", baseURL: nil)
4
© Santiago Pavón - UPM-DIT
Propiedades y MétodosPropiedades:
delegate (IBOutlet)requestloadingcanGoBackcanGoForwarddetectsPhoneNumbers scalesPageToFit dataDetectorTypesscrollView…
Métodos:stopLoading (IBAction)reload (IBAction)goBack (IBAction)goForward (IBAction)stringByEvaluatingJavaScriptFromString:…
5
© Santiago Pavón - UPM-DIT
UIWebViewDelegate
Se llama si falla la carga del contenido.
func webViewDidFinishLoad(_ webView: UIWebView)
Se lama antes de empezar a cargar contenido.
func webView(_ webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType navigationType: UIWebViewNavigationType) -> Bool
Se llama tras terminar la carga del contenido.
func webViewDidFinishLoad(_ webView: UIWebView)
Se llama tras empezar la carga del contenido.
func webViewDidStartLoad(_ webView: UIWebView)
6
© Santiago Pavón - UPM-DIT
Permitir Conexiones HTTPAñadir en Info.plist
7
© Santiago Pavón - UPM-DIT
Añadir a Info.plist:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict>
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/>
</dict><key>CFBundleDevelopmentRegion</key><string>en</string><key>CFBundleExecutable</key><string>$(EXECUTABLE_NAME)</string><key>CFBundleIdentifier</key><string>$(PRODUCT_BUNDLE_IDENTIFIER)</string><key>CFBundleInfoDictionaryVersion</key>
. . .
8
© Santiago Pavón - UPM-DIT
Demo: Browser
Hacer un navegador Web.
Incluir:
- área para el contenido web
- barra de direcciones
- botones back, forward, stop, reload
9
© Santiago Pavón - UPM-DIT
Framework : WebKit
10
© Santiago Pavón - UPM-DIT
WebKitFramework más avanzado que proporciona la vista WKWebView.
- Mejores prestaciones, mejor soporte de gestos, …
- Mayor control en el proceso de carga de páginas.
Varios tipos de delegados que pueden seguir el progreso de la carga.
- Propiedades observables (KVO): título, progreso, URL.
- User Scripts:
Podemos inyectar código javascript en las páginas visualizadas.
- Script Messages:
El código nativo puede recibir notificaciones desde el javascript inyectado.
- . . .
11
© Santiago Pavón - UPM-DIT
12