Je suis juste en train d'essayer de me tourner vers une simple vue de commutation pour l'iPhone et j'ai créé une application simple pour essayer de m'aider à le comprendre.iPhone Voir basiques de commutation
J'ai inclus le code de mon contrôleur racine utilisé pour changer les vues. Mon application dispose d'une barre d'outils unique avec trois boutons chacun reliant à une vue. Voici mon code pour le faire, mais je pense qu'il y a un moyen plus efficace d'y parvenir? Existe-t-il un moyen de trouver/supprimer la vue affichée au lieu d'avoir à faire les instructions if pour voir si l'une ou l'autre a une superclasse?
Je sais que je pourrais utiliser une barre d'onglets pour créer un effet similaire, mais j'utilise cette méthode pour m'aider à pratiquer quelques-unes des techniques.
-(IBAction)switchToDataInput:(id)sender{
if (self.dataInputVC.view.superview == nil) {
if (dataInputVC == nil) {
dataInputVC = [[DataInputViewController alloc] initWithNibName:@"DataInput" bundle:nil];
}
if (self.UIElementsVC.view.superview != nil) {
[UIElementsVC.view removeFromSuperview];
} else if (self.totalsVC.view.superview != nil) {
[totalsVC.view removeFromSuperview];
}
[self.view insertSubview:dataInputVC.view atIndex:0];
}
}
-(IBAction)switchToUIElements:(id)sender{
if (self.UIElementsVC.view.superview == nil) {
if (UIElementsVC == nil) {
UIElementsVC = [[UIElementsViewController alloc] initWithNibName:@"UIElements" bundle:nil];
}
if (self.dataInputVC.view.superview != nil) {
[dataInputVC.view removeFromSuperview];
} else if (self.totalsVC.view.superview != nil) {
[totalsVC.view removeFromSuperview];
}
[self.view insertSubview:UIElementsVC.view atIndex:0];
}
}
-(IBAction)switchToTotals:(id)sender{
if (self.totalsVC.view.superview == nil) {
if (totalsVC == nil) {
totalsVC = [[TotalsViewController alloc] initWithNibName:@"Totals" bundle:nil];
}
if (self.dataInputVC.view.superview != nil) {
[dataInputVC.view removeFromSuperview];
} else if (self.UIElementsVC.view.superview != nil) {
[UIElementsVC.view removeFromSuperview];
}
[self.view insertSubview:totalsVC.view atIndex:0];
}
}
Merci pour la réponse. Je pense que l'instruction if devrait empêcher la création de la vue à chaque fois, mais seulement quand elle n'existe pas déjà. Comme j'ai inclus dans le didReceiveMemoryWarning une section de code qui va supprimer les vues inactives, si cela devait arriver, une nouvelle vue devrait être créée et aussi une forme de chargement paresseux si l'utilisateur ne clique jamais sur l'une des vues alors il ne sera jamais chargé. Est-ce que ça marche? J'aime ce que vous avez fait là-bas, c'est beaucoup plus propre mais cela n'entraînerait-il pas une pénalité de mémoire si les trois vues étaient chargées en même temps? Merci –
Si vous voulez que votre code fonctionne avec le didReceiveMemoryWarning, incluez votre code de chargement paresseux dans chacune des actions IB, plutôt que dans une méthode init comme je l'ai fait. La chose qui est laide à propos de votre code sont les appels removeFromSuperview – pheelicks