2011-07-31 15 views
5

¿Cómo se puede pasar una variable entre los métodos?Objetivo-C: método correcto para pasar

Tengo UITabBarController.

- (void)tabBarController:(UITabBarController *)tabBarController 
     didSelectViewController:(UIViewController *)viewController { 
    NSLog(@"my ns string %@", viewController.tabBarItem.title); 
} 

necesito el conjunto de variables NSString para que pueda acceder a él cuando se especifican las células de mi mesa dentro de este evento. La idea es que los contenidos de la tabla dependan del título de la pestaña.

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 

En otros idiomas con los que estoy familiarizado, siempre paso variables entre funciones o son variables dentro de la clase. Soy nuevo en Objective-C y no estoy seguro de cómo tratar con ámbitos de variables.

He leído que se puede hacer mediante la creación de una clase que se utiliza únicamente para las variables. ¿Es esta la forma correcta de hacerlo? El consejo es muy apreciado.

+1

Creo que objetivo-c está luchando fuertemente contra el tipo de código que estás tratando de hacer, está muy basado en MVC, y la información se extiende de arriba hacia abajo, esencialmente el controlador de barra de pestañas debe pasar la cadena, (o, más en general, la menor cantidad de información externa necesaria), entonces el controlador de vista debe hacer su propia configuración en función de la información que se transmite. Consulte setters/getters/accessors para obtener más información sobre cómo pasar la información. –

Respuesta

0

Aún puede pasar variables en Objective-C: comúnmente para un controlador de vista que posee la tabla, le pasará ese valor de cadena.

Si la cadena fuera necesaria en un ámbito más global, podría ponerla en el delegado de la aplicación como una propiedad para acceder.

Si con el tiempo, demasiadas cosas terminan en el delegado de la aplicación, puede agruparlas en un singleton; el delegado de la aplicación es un singleton, pero puede hacer otras instancias que permanezcan durante la vida útil de la aplicación y lugares centrales para almacenar valores comúnmente utilizados en toda la aplicación.

0

Las aplicaciones de Objective-C en mi experiencia tienen un enfoque descendente. Es un poco paralelo, tienes la jerarquía de vista y la jerarquía del controlador.

La jerarquía de vista para iphone comienza desde la ventana, luego va a la primera subvista y luego a las subvistas posteriores.

El controlador analógico para ventana es el delegado de la aplicación, que generalmente crea la primera vista controlador. A partir de ahí, cada vista (pantalla completa) tiene un controlador, y tienden a ser creados y configurados por sus controladores de vista padres.

En su caso, parece que las pestañas deben tener puntos de vista idénticos, y que debe recibir algún tipo de puntero a sus datos desde su subclase de la barra de control pestaña.

0

Nota: La siguiente respuesta está fuera del alcance de pasar valores entre los métodos/controladores de visualización.

Si la vista del controlador de la mesa es uno de los controladores de vista en el controlador de barra de pestañas, se puede obtener el título de la barra de pestañas sólo por el uso de la línea,

NSString *title = self.tabbarItem.title; 
0

El La idea es que los contenidos de la tabla dependen del título de la pestaña.

Usted puede la propiedad 'etiqueta' insted del título.Creo que se puede utilizar:

//In some place or your UITabBarController 
... 
UITabBarItem *item; 
... 
item.tag = YOUR_DEFINED_VALUE; 
... 


- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    switch(tabBarController.tabBar.selectedItem.tag) { 
case YOUR_DEFINED_VALUE: 
... 
self.typeOfCell = CELL_TYPE; 
[tableView reloadData]; 
... 
} 
} 

UITabBarItem se extiende desde UIBarItem que tiene la propiedad de 'etiqueta'.

0

Parece que esta pregunta nunca fue respondida correctamente. La respuesta a su pregunta es, puede declarar variables como @property y pasar valores entre los controladores.

Por ejemplo: -

Si desea pasar algo a viewController, declararemos como una propiedad en esa clase como,

@property(nonatomic, retain) NSString *someValue; 

y configurarlo como,

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    viewController.someValue = someValues; 
} 

Puede usar esto en la clase viewController como,

NSLog(@"value is %@", self.someValue); 

En su caso, puede usar self.tabbarItem.title directamente en su método cellForRowAtIndexPath:.

Cuestiones relacionadas