Translate

miércoles, 23 de noviembre de 2011

XCode: View Controllers

En esta entrada vamos a ver como crear un App para IOS en el que tendremos dos view Controllers, uno de ellos el principal con el que se inicia la aplicación, y que dispone de un botón que nos permite cambiar a otro view.
El efecto de transición entre uno y otro será rotando de manera que parezca que un view está a la espalda del otro.




Creación de un view Controller principal

1º Selecionamos un proyecto vacío. Este creara ficheros .h y .m  para el Applicattion Delagate.

2º Añadimos un controlador: New+  File + UIViewController subclass, le ponemos el nombre (MainViewController) y marcamos que cree el fichero xib.
Una vez creado añadirá un fichero .h y otro .m para la clase del view controller. Igualmente creará un fichero XIB.

3º En el AppDelegate.h definimos la clase del view controller creado.
, y una propiedad con la que creamos un puntero a una instancia del controlador

@class MainViewController;
@property (strong, nonatomic) MainViewController *mainViewController;


4º En el AppDelegate.m añadimos:

#import “MainViewController.h”
@synthesize mainViewController = _mainViewController;


5º En el AppDelegate.m buscamos el método didFinishLaunching y añadimos:

self.mainViewController =[[mainViewController alloc] initWithNibName:@”MainViewController.xib” bundle:nil];
self.window.rootViewController = self.managedObjectContext;
self.mainViewController.managedObjectContext = self.managedObjectContext;

6º En el MainViewController. h definimos una propiedad  y la sintetizamos en el fichero .m:

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@synthesize managedObjectContect = _managedObjectContext;



Creación de un segundo view Controller

1º Volvemos a añadir un UIViewController de la misma manera que hicimos para el principal. Le ponemos de nombre SecondViewController. Esto creara sus correspondientes .h, .m y .xib

2º En MainViewController añadiremos una acción que servirá después para llamar a la ventana del 2º VC. También importaremos SecondViewController.h

#import “SecondViewController”;
-(IBAction)showInfo:(id)sender;


3º Modificamos la definición del interface de MainViewController, que debe quedar de la siguiente manera:

@interface MainViewController : UIViewController


4º En MainViewController.m implementamos la acción showInfo para que llame al segundo view:

-(IBAction)showInfo:(id)sender{
SecondViewController *controller = [[SecondViewController alloc] initWithNibName:@”SecondViewController” bundle:nil];
controller.delegat = self;
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:controller animated:YES];
}


5º En SecondViewController.h  crearemos la clase correspondiente, así como el delegado, con su correspondiente método DidFinish

@class SecondViewController;
@protocol SecondViewControllerDelegate
-(void)secondViewControllerDidFinish: (SecondViewController *)controller;
@end

6º Igualmente crearemos la definición para el SecondViewController con un Outlet que apunta al delegado y una acción que permitirá salir de esta ventana y volver a la anterior.

@interface SecondViewController : UIViewController
@property (weak, nonatomic) IBOutlet id delegate;
-(IBAction)done:(id)sender;
@end


7º  En SecondViewController.m importamos el .h, sintetizamos la propiedad delegate e implementamos la Acción done

#import “SecondViewController.h”
@synthesize delegate
-(IBAction)done:(id)sender
{
[self.delegate secondViewControllerDidFinish:self];
}


8º En MainView.xib coloco un botón y le asigno de IBAction el método ShowInfo, lo mismo para el botón del SecondViewControler y la acción Done.

No hay comentarios: