Enviar datos entre ViewControllers en iOS [Objective C]

iOS Development

Posted by Alex Ferrer on 2 years ago

Este es uno de mis primeros posts sobre desarrollo para la plataforma iOS, llevo ya entre 4 y 6 meses que estoy desarrollando para dispositivos iOS en mi actual trabajo como Mobile Developer en Comunicación Visible.

Al empezar en este otro mundillo del desarrollo de apps, una de mis primeras dudas era el cómo enviar datos entre controladores, de forma semejante a los datos que enviamos entre activities con los Extras en Android. Por eso escribo este post, para si puede ser de ayuda a desarrolladores Android que están empezando con iOS.

¿Como podemos enviar datos de un ViewController B a un previo ViewController A?

Para poder enviar datos entre ellos podemos hacer uso de los delegados, para eso en el ViewController B necesitamos crear un protocolo que nos enviará (retornará) los datos al ViewController A. Por lo tanto el ViewController A será delegado del ViewController B.

Ejemplo en código:

1. Creamos el protocolo en el ViewControllerB.h:

#import <UIKit/UIKit.h>

@protocol protocoloEnviarDatos<NSObject>
-(void)sendDataToA:(NSArray*)array; // Ejemplo datos a enviar
@end

@interface ViewControllerB : UIViewController
@property(nonatomic,assign)id delegate;
...
@end

2. En la implementación podremos llamar al protocolo cuando queramos retornar los datos al ViewController A:

@synthesize delegate;
-(void)viewWillDisappear:(BOOL)animated
{
     [delegate sendDataToA:tusdatos];
}

3. El último paso, es asignar el delegado del ViewController B al ViewController A y definir la función del protocolo:

ViewControllerB * viewB=[[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:nil];
viewB.delegate=self; // Asignamos el delegado
[self.navigationController pushViewController:viewB animated:YES];
-(void)sendDataToA:(NSArray *)array
{
   // Aquí nos llegaría la información y haremos lo que queramos con ella.
}

Hasta aquí una pequeña aportación de los temas que voy aprendiendo en el terreno del desarrollo iOS.

Share this post!