tab sizes icon guidelines bottom bar activity iphone objective-c uiviewcontroller uitabbarcontroller

sizes - iPhone: Cómo pasar datos entre varios Viewcontrollers en una aplicación Tabbar



tabbar icon sizes (3)

Tengo el siguiente problema:

He creado una aplicación de barra de pestañas con 4 pestañas. Quiero pasar un objeto / variable del primer controlador de pestañas al tercero e inicializar este controlador con el objeto correspondiente.

Ya hice algunas investigaciones. La mejor manera, que corresponde a un enfoque de modelo limpio, sería llamar a algún método initWithObject: en el viewcontroller llamado. ¿Cómo puedo conseguir esto? ¿Cómo puedo llamar al método init del receivercontroller dentro del controlador de llamadas? ¿Me puede dar algún ejemplo de código?

Editar: para pasar datos entre varias vistas / clases, etc. simplemente cree algún tipo de clase de datos que contenga la información compartida entre varias clases. Para más información siga el enlace: Singleton


Es posible que desee considerar NSNotificationCenter ( Reference ); registra el viewcontroller con el centro de notificaciones de la aplicación y envía una notificación cuando se realiza una selección. Cuando se recibe la notificación, el otro viewcontroller se actualiza en consecuencia.


Necesita un objeto de modelo de datos que almacene los datos para la aplicación.

Un modelo de datos es un objeto personalizado e independiente accesible desde cualquier lugar de la aplicación. El objeto del modelo de datos no sabe nada sobre las vistas o los controladores de vista. Simplemente almacena datos y las relaciones lógicas entre esos datos.

Cuando diferentes partes de la aplicación necesitan escribir o leer datos, escriben y leen el modelo de datos. En su caso, view1 guardará sus datos en el modelo de datos cuando se descargue y luego view2 leerá esos datos del modelo de datos cuando se carga (o viceversa).

En una aplicación diseñada correctamente, no hay dos controladores de vista que tengan acceso a los datos internos de otro controlador. (La única razón por la que un controlador de vista necesita saber de la existencia de otro controlador es si tiene que desencadenar la carga de ese otro controlador).

La forma rápida y sucia de crear un modelo de datos es agregar atributos al delegado de la aplicación y luego llamar al delegado de la aplicación desde los controladores de vista usando:

YourAppDelegateClass *appDelegate = [[UIApplication sharedApplication] delegate]; myLocalProperty = appDelegate.someDataModelProperty;

Esto funcionará para proyectos pequeños pero a medida que sus datos se vuelvan complejos, debe crear una clase dedicada para su modelo de datos.

Editar:

Para aclarar su caso específico, agregará la llamada al modelo de datos cuando el receptor viewController se active.

Colocar los datos en un método init o en un viewDidLoad no funcionará porque en una UITabBar los usuarios pueden cambiar de una a otra sin descargar la vista o reiniciar el controlador de vista.

El mejor lugar para recuperar datos cambiantes está en el método de control viewWillAppear . De esta forma, los datos se actualizarán cada vez que el usuario cambie a esa pestaña.


No creo que esta sea la mejor práctica (también verifique la sintaxis), sin embargo, me he salido con la suya:

en el .h

otherclassref *otherclassname @property (assign) otherclassname otherclassref;

y en .m

@synthesize otherclassref;

luego, simplemente asigno la referencia desde algún lugar conveniente, por ejemplo, el delegado de la aplicación o donde sea que esté instanciando sus controladores de visualización.

entonces el controlador de vista puede obtener una referencia al otro controlador de vista.

Agrego @class secondviewcontroller al archivo .h para firstviewcontroller y coloco put the #imports "secondviewcontroller.h" en el archivo .m del primer controlador de vista. Se denominan referencias directas y evitan los errores del compilador que resultan de tener archivos .h haciendo referencia entre sí.