Bonjour à tous, voici le topo.
Je me suis inspiré de ce livre pour réaliser un switch entre différentes vues, mais j'obtiens un résultat bizarre...
Pour faire simple, l'architecture est la suivante:
RootViewController
|_ myViewController (x2)
|_ UIView (dans le fichier myView_iPhone.xib et myView_iPad.xib)
|_ UIButton + UILabel
Le but est quand je clic sur le bouton de ma vue 1, j'affiche la vue 2, et inversement. Voici comment j'ai codé tout cela:
RootViewController.m
myViewController.m
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 -(void)viewDidLoad{ [self.view setBackgroundColor:[UIColor redColor]]; NSString * nibName; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) nibName=@"myView_iPad"; else nibName=@"myView_iPhone"; vc1 =[[myViewController alloc]initWithNibName:nibName bundle:nil]; vc2 =[[myViewController alloc]initWithNibName:nibName bundle:nil]; [vc1.view setBackgroundColor:[UIColor grayColor]]; [vc2.view setBackgroundColor:[UIColor greenColor]]; [self.view insertSubview:vc1.view atIndex:0]; [super viewDidLoad]; } -(void) switchView{ if(vc1.view.superview != nil){ [vc1.view removeFromSuperview]; [self.view insertSubview:vc2.view atIndex:0]; }else{ [vc2.view removeFromSuperview]; [self.view insertSubview:vc1.view atIndex:0]; } }
et voici le résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 -(IBAction)onTouchSwitch:(id)sender{ AppDelegate_Shared * appD=(AppDelegate_Shared*)[[UIApplication sharedApplication] delegate]; [appD.rootViewController switchView]; }
Je ne saisis pas pourquoi la vue de vc1 se charge à moitié. Autre chose de bizarre, au niveau du bouton sur vc1, si je clique sur la gauche du bouton (vers la partie grise) ça fonctionne. Si je clique sur la droite (partie rouge) il ne fonctionne pas...
J'ai aussi essayé de modifier la méthode switchView, pour qu'à chaque switch j'instancie une nouvelle vue à partir du xib. Au lancement, même problème, par contre quand je switch 2 fois et reviens sur la première vue, elle est affichée correctement et fonctionnelle.
J'ai inversé l'ordre d'instanciation, en instanciant vc2 avant vc1, le résultat est le même, vc1 est toujours défectueux. Le problème vient donc (selon moi) du premier [self.view insertSubview:vc1.view atIndex:0]; dans le viewDidLoad...
Avez-vous une idée?
merci d'avance pour votre aide !
Partager