1 / 28

Curs de programació d ’ iOS

Curs de programació d ’ iOS. Novembre de 2011. Organitza. 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 .

hallie
Download Presentation

Curs de programació d ’ iOS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curs de programació d’iOS Novembre de 2011 Organitza

  2. 9Navegació(UINavigationController) • Les aplicacions que tenen múltiples pantallesd’informacióutilitzen la classeUINavigationController • UINavigationControllerésl’encarregat de mantenir una pila de pantalles. • Les vistes, o instancies view, que apareixena la pantalla pertanyen al UIViewControllersituat a la partmés alta de la pila.

  3. Navegació

  4. Navegació • Quans’inicialitza una instància de UINavigationController se li ha d’especificar un UIViewControllerarrel. • El UIViewControllerarrelmostra la primera pantalla que l’usuariveu.

  5. Navegació UINavigationController rootViewController viewControllers topViewController NSArray UIViewController UIViewController

  6. Navegació • Quan la pila rep una operació de tipuspushViewController, s’afegeix un nou controlador a la posiciómés alta de la pila i es mostra per pantalla la sevacorresponent vista.

  7. Navegació(pushViewController) [[self navigationController] pushViewController:viewControlleranimated:YES];

  8. Navegació • Quan la pila rep una operació de tipuspopViewController, 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. Navegació • UINavigationControllerté almenysduesvistes: • La vista del UIViewControllersituat a la partmés alta de la pila, ésa dir, el que s’estàmostrant. • Un UINavigationBar (barra superior de navegació)

  12. Navegació UINavigationController topViewController navigationBar view UIViewController UINavigationBar view UIView

  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 = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]] autorelease]; self.viewController= [[[LlistaViewControlleralloc] initWithNibName:@"LlistaViewController" bundle:nil] autorelease]; UINavigationController *navController = [[UINavigationControlleralloc] initWithRootViewController:self.viewController]; self.window.rootViewController= navController; [navController release]; [self.windowmakeKeyAndVisible]; returnYES; }@end

  14. UINavigationBar • UINavigationBarés la classeencarregada de representar la barra de navegació. • La classeUINavigationItemésl’encarregada de proporcionar a la barra de navegació el contingut que ha de mostrar. • ElscontroladorsUIViewControllertenen la propietatnavigationItem del tipusUINavigationItem • Quans’empilaun UIViewController, el controlador de navegacióUINavigationBarutilitza la propietatnavigationItem per obtenir el contingut a mostrar.

  15. UINavigationBar navigationBar UINavigationController UINavigationBar Obté les dades que ha de mostrar a partir de... topViewController navigationItem UIViewController UINavigationItem

  16. UINavigationBar topViewController UNavigationController UIViewController navigationBar navigationItem UINavigationItem title = @”MyApp”

  17. UINavigationBar navigationBar UINavigationController topViewController UIViewController UINavigationItem navigationItem leftBarButtonItem titleView rightBarButtonItem UIBarButtonItem UILabel UIBarButtonItem text = @”New Message” title = @”Cancel” title = @”Send”

  18. 10 Interaccióambserveis web • Un servei web és una aplicació que corre sobre un servidor web. • Permetenl’intercanvid’informació entre el terminal i el servidor. • El formatmés habitual de les dades que es transfereixen entre un servei web i una aplicacióclientés XML i JSON.

  19. Obtenirdades des d’una URL • Disposem de tres classes: NSURL, NSURLRequest i NSURLConnection NSURLRequest NSURLConnection NSURL cachePolicy Timeout httpHeaders httpBody URL request http://www.google.com

  20. Obtenirdades des d’una URL • NSURL: Conté l’adreça URL de l’aplicació web. • NSURLRequest: Les instànciesd’aquestaclasseemmagatzemen totes les dadesnecessàries per a la comunicacióamb el servidor web. Configuració de la caché, tempsmàxim de resposta, capçaleres http, etc… • NSURLConnection: Les instànciesd’aquestaclassesón les responsables de portar a terme la connexióamb el servidor web, enviar i rebre la informació.

  21. Comtreballaramb la classeNSURLConnection • Es potconnectar a un servidor web de duesmaneres: en modesíncron o modeasíncron. • El modesíncronbloquejal’aplicaciómentre no es reben les dadescompletament. • El modeasíncronno paralitza la l’aplicaciódurant les transferències. Elscallbackss’invoquen sobre la classedelegadora que implementa NSURLConnectionDelegate

  22. Exemple de connexió asíncrona • Crea la connexió a un RSS // Composar la URL del servei web NSURL *url = [NSURL URLWithString:@” http://www.elpais.com/rss/”]; // Composar el request NSURLRequest *request = [NSURLRequestrequestWithURL:urlcachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30]; if(connectionInProgress) { [connectionInProgress cancel]; [connectionInProgress release]; } xmlData = [[NSMutableDataalloc] init]; // S’inicia la connexióasíncrona (no-bloquejant) connectionInProgress = [[NSURLConnectionalloc] initWithRequest:requestdelegate:selfstartImmediately:YES];

  23. Exemple de connexió asíncrona • Implementar elsmètodesdelegats de NSURLConnectionDelegate • Concatenar les dades que es van rebent. // Composar la URL del servei web // Aquestmètodeseràinvocat varies vegades a mesuraquevaginarribantels fragments de dades - (void) connection: (NSURLConnection *)connection didReceiveData: (NSData *)data { [xmlDataappendData:data]; } • Quan la connexió acaba d’obtenir totes les dadess’invoca el mètodeconnectionDidFinishLoading al delegat. - (void)connectionDidFinishLoading: (NSURLConnection *)connection { NSString *xmlCheck = [[[NSStringalloc] initWithData:xmlData encoding:NSUTF8StringEncoding] autorelease]; NSLog(@”xmlCheck = %@”, xmlCheck); }

  24. Exemple de connexió asíncrona • Hi ha la possibilitat de que la connexiófalli. En aquests casos s’invoca el mètodeconnection:didFailWithError - (void)connection: (NSURLConnection *)connection didFailWithError: (NSError *)error { [connectionInProgress release]; connectionInProgress = nil; [xmlData release]; xmlData = nil; }

  25. Anàlisis de dades XML • Per processar les dades XML que s’obtenend’unservei web cal emprar un parser XML. • Per a aquesta tasca disposem de la classeNSXMLParser • A mesura que el parseravançaamb la lectura de dades, aniràenviantmissatges al seudelegat de tipusNSXMLParserDelegate el quall’informarà del progrés. • Parser de tipusSAX

  26. NSXMLParser // Crearl’objecte parser ambdadesrebudes del servei web anterior NSXMLParser *parser = [[NSXMLParseralloc] initWithData:xmlData]; // Cal assignar-li el delegate de tipusNSXMLParserDelegate [parser setDelegate: self]; // Iniciar el parseig. El document XML seràanalitzat I formatejat, i el delegate de NSXMLParserrebrà tots elsseusmissatges // delegatsabans de quefinalitzil’execuciód’aquestalinia (bloquejant) [parser parse]; // En aquest punt el parser ha finalitzatija el podemalliberar [parser release]; // Podemrefrescar les dades de la taula [[self tableView] reloadData];

  27. NSXMLParser • Implementaciódelsmètodesdelegats de NSXMLParserDelegate • Mètode per processarelstagsd’inici o obertura parser:didStartElement:nameSpaceURI:qualifiedName:attributes - (void)parser: (NSXMLParser *)parser didStartElement: (NSString *)elementNamenamespaceURI : (NSString *)namespaceURIqualifiedName: (NSString *)qName attributes: (NSDictionary *)attributeDict { if([elementNameisEqual:@”title”]) { NSLog(@”TAG <title> trobat.”); titleString = [[NSMutableStringalloc] init]; } } • Concatenar el text que hi ha entre tag i tag. - (void)parser: (NSXMLParser *)parser foundCharacters: (NSString *)string { [titleStringappendString:string]; }

  28. NSXMLParser • Mètode per processarelstagsde tancamentparser:didEndElement:nameSpaceURI:qualifiedName - (void)parser: (NSXMLParser *)parser didEndElement: (NSString *)elementNamenamespaceURI : (NSString *)namespaceURIqualifiedName: (NSString *)qName { if([elementNameisEqual:@”title”]) { NSLog(@”TAG </title> trobat.”); [object setTitle:titleString]; [titleString release]; titleString = nil; } }

More Related