2009-10-30 2 views
0

J'ai un problème avec basculer la vue entre 2 vues avec les fichiers nib! voici mon code. ma première page va à la page 2! mais à la page 2 je ne peux pas revenir à la première page! mon application sortir .. voici mon code:iPhone Switch vues _KILL! Problème

de la page 1 à 2:

#import "HafezViewController.h" 
#import "GhazaliateHafez.h" 


-(IBAction)gh:(id)sender { 
    HafezViewController *ghPage = [[HafezViewController alloc] initWithNibName: @"GhazaliateHafez" bundle:nil]; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1.3]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES]; 
    [self.view addSubview:ghPage.view]; 
    [UIView commitAnimations]; 
} 

^^^^^^^^^ ce code fonctionne très bien! Mais de la page 2 à l'arrière:

#import "GhazaliateHafez.h" 
#import "HafezViewController.h" 

@implementation GhazaliateHafez 


-(IBAction)ghtoIndex:(id)sender { 
    HafezViewController *back1 = [[HafezViewController alloc] initWithNibName:@"index" bundle:nil]; 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1.5]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES]; 
    [self.view addSubview:back1.view]; 
    [UIView commitAnimations]; 

} 

après que je tape sur le bouton retour mon application aller écraser ... ce qui est mon problème? merci

+0

Je vous recommande vivement de modifier votre message pour corriger la mise en forme de votre code. C'est extrêmement difficile à lire dans son état actuel. –

+0

l'a réparé !!!!!!! – Momi

Répondre

1

Vous ajoutez view2 à view1, puis vous ajoutez un view1 à view2. Une fois terminé avec View2, appel simple self.view.removeFromSuperview et vue 1 sera montré à nouveau.

En fait, en regardant cette fois, il semble que vous voudrez peut-être regarder presentModalViewController pour afficher la vue 2.

+0

Donc je dois changer cette ligne [self.view addSubview: back1.view]; à ceci?: [self.view.removeFromSuperview]; – Momi

0

Deux pensées qui pourraient vous aider sur le chemin:

Je pense que vous pouvez exécuter ce par Instruments. Est-ce que vous fuyez la mémoire? Vous allouez une vue à chaque clic, puis la mettez en cache ... les libérez-vous? Serait-il plus facile d'avoir deux vues séparées de celles-ci, dans un tableau par exemple, puis d'indexer celle que vous voulez rendre active et de l'intégrer dans la boucle d'animation ci-dessus tout en libérant et en cachant l'autre? Pas tout à fait sûr de savoir comment rendre l'autre vue sur commande car la version est contrôlée par les ordures ... mais je sais qu'il y a un moyen de le faire.

And this is from a post from earlier that helped me when I was asking how to remove a subview immediately:


myGroovySubview.hidden = YES; cache la vue. Vous pouvez également essayer de le supprimer de sa vue d'ensemble avec [myGroovySubview removeFromSuperview];

Si vous l'avez supprimé de sa vue d'ensemble, l'appel de libération doit automatiquement le retirer de la mémoire, car le nombre de références doit être égal à zéro après cet appel.

+0

à Marc: Donc je dois changer cette ligne [self.view addSubview: back1.view]; pour ça ? : [self.view.removeFromSuperview]; ?? – Momi

+0

Commencez avec la vue 1. Puis ajoutez la sous-vue 2. Lorsque vous avez terminé avec la sous-vue 2, supprimez-la de la vue d'ensemble. Vous êtes à gauche avec subview 1. dans votre code, vous ajoutez la vue 2 avec addSubview ..., et vous supprimez la vue 2 avec removeFormSuperview ... – Spanky

+0

merci ... mais pouvez-vous écrire le code correct? am Amateur :( – Momi