2012-01-19 8 views
5

Estoy usando iOS 5 con Storyboard. Mi UITabBar se crea utilizando el Interface Builder. Tengo dos artículos similares en mi TabBar que es la misma lista, solo que con un tipo de artículo diferente. Lo que he hecho, pero me parece extraño, es establecer una "Etiqueta" diferente para cada UITableView y en el viewDidLoad, y luego asignar el tipo correcto de acuerdo con la Etiqueta.UITabBar - dos vistas (punta) misma Clase usando Storyboard

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (self.tableView.tag == 1) 
    { 
     type = @"lent"; 
    } 
    else if (self.tableView.tag == 2) 
    { 
     type = @"borrowed"; 
    } 
} 

¿Alguna mejor manera de hacerlo? No estoy creando mi UITabBar en el código, ¡así que mi AppDelegate está bastante vacío! El tipo que configuré es solo un atributo en una de mi Entidad de datos centrales, en una lista tengo artículos prestados y en el otro tengo artículos prestados, pero son la misma entidad.

Respuesta

3

Puede exponer el tipo como una propiedad en su controlador de vista común y configurarlo cuando se selecciona la barra de pestañas correspondiente (tabBarController:didSelectViewController: del protocolo UITabBarControllerDelegate; su delegado de la aplicación sería el delegado del controlador de la barra de pestañas).

Lo configuraría de la siguiente manera. Declare que su delegado de aplicación cumple con el protocolo UITabBarControllerDelegate, luego configúrelo como el delegado del controlador de la barra de pestañas (debe hacer esto en el código ya que el delegado de la aplicación no está disponible para conectarse en el guión gráfico). En su applicationDidFinishLaunching, añada lo siguiente antes de regresar SÍ:

UITabBarController *tbc = (UITabBarController*)self.window.rootViewController; 
tbc.delegate = self; 

luego implementar el método siguiente delegado:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 

    switch (tabBarController.tabBar.selectedItem.tag) 
    { 
     case 1: 
      viewController.property = @"propertyA"; 
      break; 
     case 2: 
      viewController.property = @"propertyB"; 
      break; 
    } 

    NSLog(@"view controller is %@",viewController); 

} 

que necesitará convertir la variable viewController a su punto de vista real clase del controlador, y también asigne las etiquetas relevantes al elemento de la barra de pestañas de cada controlador de vista.

+0

Hm, la solución se ve bien! Así que simplemente puse tabBarController: didSelectViewController: en mi delegado de la aplicación? Daré una oportunidad mañana por la mañana y te mantendré informado. ¡Gracias! – allaire

+0

También deberá configurar al delegado de la aplicación para que sea el delegado del controlador de la barra de pestañas y declarar que el delegado de su aplicación cumple con el protocolo. – jrturton

+0

¿Tiene un minuto para compartir un pequeño fragmento de código, lo que probé no funcionó:/ – allaire

1

Lo que tienes allí debería funcionar bien. Otra opción sería tener una superclase UIViewController común que tenga toda la funcionalidad y luego subclases esa clase base y proporcionar una implementación de viewDidLoad que establezca el tipo apropiado. Luego, en Interface Builder puede configurar los controladores de vista UITabBar como sus subtipos apropiados.

El resultado sería el mismo, pero puede ser un poco más claro en IB lo que está sucediendo porque no tiene que confiar en recordar el significado de cada etiqueta numérica.

+0

Gracias por la sugerencia :) – allaire

Cuestiones relacionadas