Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porMonica Bustamante Correa Modificado hace 10 años
1
Curs de programació d’iOS Novembre de 2011 Organitza
2
9 Navegació (UINavigationController) Les aplicacions que tenen múltiples pantalles d’informació utilitzen la classe UINavigationController UINavigationController és l’encarregat de mantenir una pila de pantalles. Les vistes, o instancies view, que apareixen a la pantalla pertanyen al UIViewController situat a la part més alta de la pila.
3
Navegació
4
Quan s’inicialitza una instància de UINavigationController se li ha d’especificar un UIViewController arrel. El UIViewController arrel mostra la primera pantalla que l’usuari veu.
5
Navegació UINavigationController topViewController NSArray rootViewControllerviewControllers UIViewController
6
Navegació Quan la pila rep una operació de tipus pushViewController, s’afegeix un nou controlador a la posició més alta de la pila i es mostra per pantalla la seva corresponent vista.
7
Navegació (pushViewController) [[self navigationController] pushViewController:viewController animated:YES];
8
Navegació Quan la pila rep una operació de tipus popViewController, s’extreu el controlador situat a la posició més alta (pantalla visible) de la pila i es torna a mostrar la pantalla del controlador anterior.
9
Navegació (popViewController) [[self navigationController] popViewControllerAnimated:YES];
10
Navegació
11
UINavigationController té almenys dues vistes: La vista del UIViewController situat a la part més alta de la pila, és a dir, el que s’està mostrant. Un UINavigationBar (barra superior de navegació)
12
Navegació UINavigationController UIViewControllerUINavigationBar UIView topViewControllernavigationBar view
13
Exemple 10 #import “CotxesAppDelegate.h" #import “CatalegViewController.h" @implementation CotxesAppDelegate @synthesize window = _window; @synthesize viewController = _viewController; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; self.viewController = [[[LlistaViewController alloc] initWithNibName:@"LlistaViewController" bundle:nil] autorelease]; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; self.window.rootViewController = navController; [navController release]; [self.window makeKeyAndVisible]; return YES; } @end
14
UINavigationBar UINavigationBar és la classe encarregada de representar la barra de navegació. La classe UINavigationItem és l’encarregada de proporcionar a la barra de navegació el contingut que ha de mostrar. Els controladors UIViewController tenen la propietat navigationItem del tipus UINavigationItem Quan s’empila un UIViewController, el controlador de navegació UINavigationBar utilitza la propietat navigationItem per obtenir el contingut a mostrar.
15
navigationBar UINavigationController topViewController UINavigationBar navigationItem UIViewControllerUINavigationItem Obté les dades que ha de mostrar a partir de...
16
UINavigationBar topViewController UNavigationController navigationBar UIViewController UINavigationItem navigationItem title = @”MyApp”
17
UINavigationBar navigationBar UINavigationController topViewController UIViewController navigationItem UINavigationItem UIBarButtonItem leftBarButtonItemrightBarButtonItemtitleView UILabelUIBarButtonItem title = @”Cancel”title = @”Send” text = @”New Message”
18
10 Interacció amb serveis web Un servei web és una aplicació que corre sobre un servidor web. Permeten l’intercanvi d’informació entre el terminal i el servidor. El format més habitual de les dades que es transfereixen entre un servei web i una aplicació client és XML i JSON.
19
Obtenir dades des d’una URL Disposem de tres classes: NSURL, NSURLRequest i NSURLConnection NSURLConnection request NSURLRequest URL NSURL cachePolicy Timeout httpHeaders httpBody http://www.google.com
20
Obtenir dades des d’una URL NSURL: Conté l’adreça URL de l’aplicació web. NSURLRequest: Les instàncies d’aquesta classe emmagatzemen totes les dades necessàries per a la comunicació amb el servidor web. Configuració de la caché, temps màxim de resposta, capçaleres http, etc… NSURLConnection: Les instàncies d’aquesta classe són les responsables de portar a terme la connexió amb el servidor web, enviar i rebre la informació.
21
Com treballar amb la classe NSURLConnection Es pot connectar a un servidor web de dues maneres: en mode síncron o mode asíncron. El mode síncron bloqueja l’aplicació mentre no es reben les dades completament. El mode asíncron no paralitza la l’aplicació durant les transferències. Els callbacks s’invoquen sobre la classe delegadora que implementa NSURLConnectionDelegate
22
Exemple de connexió asíncrona // Composar la URL del servei web NSURL *url = [NSURL URLWithString:@” http://www.elpais.com/rss/”];http://www.elpais.com/rss/ // Composar el request NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30]; if(connectionInProgress) { [connectionInProgress cancel]; [connectionInProgress release]; } xmlData = [[NSMutableData alloc] init]; // S’inicia la connexió asíncrona (no-bloquejant) connectionInProgress = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; Crea la connexió a un RSS
23
Exemple de connexió asíncrona // Composar la URL del servei web // Aquest mètode serà invocat varies vegades a mesura que vagin arribant els fragments de dades - (void) connection: (NSURLConnection *)connection didReceiveData: (NSData *)data { [xmlData appendData:data]; } Implementar els mètodes delegats de NSURLConnectionDelegate Concatenar les dades que es van rebent. - (void)connectionDidFinishLoading: (NSURLConnection *)connection { NSString *xmlCheck = [[[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding] autorelease]; NSLog(@”xmlCheck = %@”, xmlCheck); } Quan la connexió acaba d’obtenir totes les dades s’invoca el mètode connectionDidFinishLoading al delegat.
24
Exemple de connexió asíncrona - (void)connection: (NSURLConnection *)connection didFailWithError: (NSError *)error { [connectionInProgress release]; connectionInProgress = nil; [xmlData release]; xmlData = nil; } Hi ha la possibilitat de que la connexió falli. En aquests casos s’invoca el mètode connection:didFailWithError
25
Anàlisis de dades XML Per processar les dades XML que s’obtenen d’un servei web cal emprar un parser XML. Per a aquesta tasca disposem de la classe NSXMLParser A mesura que el parser avança amb la lectura de dades, anirà enviant missatges al seu delegat de tipus NSXMLParserDelegate el qual l’informarà del progrés. Parser de tipus SAX
26
NSXMLParser // Crear l’objecte parser amb dades rebudes del servei web anterior NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData]; // Cal assignar-li el delegate de tipus NSXMLParserDelegate [parser setDelegate: self]; // Iniciar el parseig. El document XML serà analitzat I formatejat, i el delegate de NSXMLParser rebrà tots els seus missatges // delegats abans de que finalitzi l’execució d’aquesta linia (bloquejant) [parser parse]; // En aquest punt el parser ha finalitzat i ja el podem alliberar [parser release]; // Podem refrescar les dades de la taula [[self tableView] reloadData];
27
NSXMLParser - (void)parser: (NSXMLParser *)parser didStartElement: (NSString *)elementName namespaceURI : (NSString *)namespaceURI qualifiedName: (NSString *)qName attributes: (NSDictionary *)attributeDict { if([elementName isEqual:@”title”]) { NSLog(@”TAG trobat.”); titleString = [[NSMutableString alloc] init]; } Implementació dels mètodes delegats de NSXMLParserDelegate Mètode per processar els tags d’inici o obertura parser:didStartElement:nameSpaceURI:qualifiedName:attributes Concatenar el text que hi ha entre tag i tag. - (void)parser: (NSXMLParser *)parser foundCharacters: (NSString *)string { [titleString appendString:string]; }
28
NSXMLParser - (void)parser: (NSXMLParser *)parser didEndElement: (NSString *)elementName namespaceURI : (NSString *)namespaceURI qualifiedName: (NSString *)qName { if([elementName isEqual:@”title”]) { NSLog(@”TAG trobat.”); [object setTitle:titleString]; [titleString release]; titleString = nil; } Mètode per processar els tags de tancament parser:didEndElement:nameSpaceURI:qualifiedName
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.