2

J'écris un UITabBarController personnalisé afin que je puisse contrôler complètement l'apparence de la barre d'onglets. Je l'ai tout fonctionne donc j'ai un tableau de contrôleurs de vue qu'il gère.Problèmes UITabBarController personnalisés avec View Controllers et Views

Le contrôleur a une vue principale qui remplit l'écran, et à l'intérieur il a un UIView en bas pour la barre d'onglets. Cette vue de la barre d'onglets a un bouton pour chaque contrôleur de vue. Lorsque les boutons sont pressés ajouter le point de vue du contrôleur de vue de la vue principale, et mettez-est bâti de façon qu'il ne couvre pas la vue barre d'onglets:

controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight); 

Tout cela fonctionne très bien, et je peux flick entre la vue les contrôleurs vont bien. Cependant, quand je présente un contrôleur de vue modal, puis le rejeter, la vue du contrôleur de vue en cours devient plein écran et couvre ma barre d'onglets! J'ai essayé de régler les masques d'autoresizing pour ne pas redimensionner, mais cela continue à se produire.

J'ai également essayé d'ajouter le point de vue vue de au fond des contrôleurs (en dessous de la barre d'onglets) en utilisant:

[self.view insertSubview:controller.view atIndex:0]; 

Mais quand je fais ça, la barre d'onglets est encore visible au-dessus des vues modales! Ce qui est étrange. Je pense qu'il y a quelque chose que je ne comprends pas, je serais reconnaissant si quelqu'un peut expliquer ce qui me manque!

Merci,

Mike

Répondre

2

J'ai réussi à trouver une meilleure façon de contrôler l'apparence de la barre d'onglets en insérant simplement subviews vers le haut des contrôleurs de l'onglet barre d'onglets. Ça a marché un régal!

+0

Hey Bisbo, avez-vous des extraits de code à afficher? J'ai des problèmes similaires avec la vue associée au deuxième onglet couvrant la barre d'onglets (mais fonctionne bien avec la première barre). TIA! – Arun

+0

Que faire si la hauteur de la nouvelle barre d'onglets n'est pas la même? Comment aborderiez-vous cela? J'ai posté une question ici: http://stackoverflow.com/questions/3766978/custom-uitabbarcontroller s'il vous plaît voir si vous pourriez répondre à cela. –

2

Essayez réglage

controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight); 

dans viewWillAppear du contrôleur méthode

+0

Merci pour votre suggestion, mais malheureusement, il n'est pas réparé! –

2

Essayez ceci. Je pense que vous voulez des contrôleurs de vue dynamiques dans le contrôleur de la barre d'onglets.

-(void)applicationDidFinishLaunching:(UIApplication *)application { 

// Add the tab bar controller's current view as a subview of the window 
tabBarController.delegate=self; 
tabBarController=[[UITabBarController alloc] init]; 

mainDashBoard=[[DashBoard alloc] initWithNibName:@"DashBoard" bundle:nil]; 
mainSearchView=[[SearchView alloc] initWithNibName:@"SearchView" bundle:nil]; 
mainMoreView=[[MoreView alloc] initWithNibName:@"MoreView" bundle:nil]; 

UINavigationController *nvCtr0=[[[UINavigationController alloc] init] autorelease]; 
UINavigationController *nvCtr1=[[[UINavigationController alloc] initWithRootViewController:mainDashBoard] autorelease]; 
UINavigationController *nvCtr2=[[[UINavigationController alloc] initWithRootViewController:mainSearchView] autorelease]; 
UINavigationController *nvCtr3=[[[UINavigationController alloc] initWithRootViewController:mainMoreView] autorelease]; 
UINavigationController *nvCtr4=[[[UINavigationController alloc] init] autorelease];//[[[UINavigationController alloc] initWithRootViewController:nil] autorelease]; 

tabBarController.viewControllers=[NSArray arrayWithObjects:nvCtr0,nvCtr1,nvCtr2,nvCtr3,nvCtr4,nil]; 

nvCtr0.tabBarItem.enabled=NO; 
nvCtr4.tabBarItem.enabled=NO; 

[window tabBarController.view]; 
}