UITabBarItems in UITabBar spettacolo Dopo aver fatto clic l'articolo non quando lanci di applicazione

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

Domanda

Questa applicazione che sto scrivendo ha un problema.

Sono la creazione della UITabBar nella mia finestra dell'applicazione e impostare le icone nei file di visualizzazione. Ma quando ho eseguito l'applicazione, le prime icone appaiono (perché la vista è caricato credo) e le altre icone non appaiono fino a quando clicco loro.

Ho bisogno di implementare self.tabBarItem in qualche altro metodo non viewDidLoad?

Grazie in anticipo a tutti!

- (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];
}
È stato utile?

Soluzione

Penso che si dovrebbe impostare la proprietà tabBarItem in un controller di vista ha designato inizializzatore (a giudicare dal codice, deve essere -init per ciascuno dei controller). In realtà, il controller barra delle schede è abbastanza intelligente per caricare il punto di vista su richiesta, che è, la proprietà tabBarItem deve essere impostata prima viewDidLoad viene inviato.

Inoltre, ti sembra di essere che perde tutti i controller di vista. Per rimediare, procedere come segue:

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

Altri suggerimenti

Una corretta. Le icone non vengono visualizzati perché la vista (diverso dal primo, non è ancora caricato). E non viene caricato fino a quando si tocca una vista a causa viewDidLoad non viene chiamato fino ad allora.

Rimuovere il codice nelle singole UIViewControllers viewDidLoad e fare questo ...

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top