UITabBarItems en UITabBar serie después de que haga clic en el elemento no cuando se inicia la aplicación

StackOverflow https://stackoverflow.com/questions/4417539

Pregunta

Esta aplicación que estoy escribiendo tiene un problema.

Soy la creación de la UITabBar en mi ventana de la aplicación y establecer los iconos de los archivos de vista. Pero cuando corro la aplicación, los primeros iconos aparecen (porque se carga la vista, supongo) y los otros iconos no aparecen hasta que haga clic en ellos.

¿Es necesario poner en práctica self.tabBarItem de algún otro método no viewDidLoad?

Gracias de antemano a todos!

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    tabBar = [[UITabBarController alloc] init];

    SubscriptionsController *subscriptionsController = [[SubscriptionsController alloc] init];
    FavoritesController  *favoritesController  = [[FavoritesController  alloc] init];
    CategoriesController *categoriesController  = [[CategoriesController alloc] init];
    TagsController   *tagsController    = [[TagsController   alloc] init];
    HelpScreenController *helpScreenController  = [[HelpScreenController alloc] init];

    tabBar.viewControllers = [NSArray arrayWithObjects:
        subscriptionsController, 
        favoritesController, 
        categoriesController, 
        tagsController, 
        helpScreenController, 
        nil
        ];

    [window addSubview:tabBar.view];

    // Override point for customization after application launch.
    [window makeKeyAndVisible];
    return YES;
}

//The View

- (void)viewDidLoad {
    [super viewDidLoad];
    tabIcon = [[UITabBarItem alloc] initWithTitle:@"Abonime" image:[UIImage imageNamed:@"subscr.png"] tag:0];
    self.tabBarItem = tabIcon;
    [tabIcon release];
}
¿Fue útil?

Solución

creo que debe establecer la propiedad tabBarItem en un controlador de vista que está designado inicializador (a juzgar por su código, debe ser -init para cada uno de los controladores). De hecho, el controlador de la barra de pestañas es lo suficientemente inteligente como para cargar los puntos de vista sobre la demanda, es decir, la propiedad tabBarItem debe establecerse antes de viewDidLoad es enviado.

Además, parece que tienen fugas todas las controladores de vista. Para corregir esto, haga lo siguiente:

SubscriptionsController *subscriptionsController = [[[SubscriptionsController alloc] init] autorelease];

Otros consejos

correcta. Los iconos no se muestran porque la vista (que no sea el primero, no se ha cargado todavía). Y no se cargan hasta que toque en una vista debido viewDidLoad no se llama hasta entonces.

Eliminar el código en los UIViewControllers individuales viewDidLoad y hacer esto ...

NSArray *controllers = [NSArray arrayWithObjects:
                                                [NSDictionary dictionaryWithObjectsAndKeys:@"SubscriptionsController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil],
                                                [NSDictionary dictionaryWithObjectsAndKeys:@"FavoritesController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil],
                                                [NSDictionary dictionaryWithObjectsAndKeys:@"CategoriesController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil],
                                                [NSDictionary dictionaryWithObjectsAndKeys:@"TagsController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil],
                                                [NSDictionary dictionaryWithObjectsAndKeys:@"HelpScreenController", @"class", [UIImage imageNamed:@"btn_tax.png"], @"icon", @"Abonime", @"title", nil],
                                                nil];

NSMutableArray *controllerArray = [NSMutableArray array] ;

 for (NSUInteger i = 0; i < [controllers count]; i++)
 {
    id newClass = [[NSClassFromString([[controllers objectAtIndex:i] objectForKey:@"class"]) alloc] init];
    UITabBarItem *tabItem = [[UITabBarItem alloc] init];
    tabItem.image = [[controllers objectAtIndex:i] objectForKey:@"icon"];
    tabItem.title = [[controllers objectAtIndex:i] objectForKey:@"title"];
    tabItem.tag = i;
    [(UIViewController*)newClass setTabBarItem:tabItem];
    [tabItem release];
    [controllerArray addObject:newClass];
    [newClass release];
 }

 tabBar.viewControllers = controllerArray;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top