2009-06-06 4 views
3

J'ai vu le poste pour How to switch views by buttons on iPhone? mais cela ne répond pas comment basculer entre les vues avec des boutons. La personne qui a posé la question a décidé de passer d'une vue à l'autre avec uinavigationcontroller.basculer entre uiviews avec des boutons et non contrôleurs uinavigation

Je mets le code suivant dans une ibaction qui se déclenche lorsqu'un bouton est pressé dans la vue primaire.

  PhoneNumberViewController *phoneNumberViewController1 = [[PhoneNumberViewController alloc] initWithNibName:@"PhoneNumberView2" bundle:nil]; 
self.phoneNumberViewController = phoneNumberViewController1; 
[self.view removeFromSuperview]; 
[self.view insertSubview: phoneNumberViewController1.view atIndex:0]; 

Lorsque ce code s'exécute, la vue entière devient vierge. Si j'omets la partie removefromsuperview alors la vue disparaît derrière mon bouton mais le bouton reste toujours. Je ne suis pas sûr que ce soit la bonne façon de passer d'un bouton à l'autre, mais si quelqu'un sait comment faire cela, merci de nous aider. Aussi, si quelqu'un connaît des exemples de projets qui basculent entre les vues avec des boutons faites le moi savoir.

Merci mille fois!

Répondre

2

Vous avez supprimé la vue du contrôleur de vue de sa vue d'ensemble, puis ajouté une sous-vue à celle-ci. La hiérarchie de vue est interrompue dans la vue d'ensemble du contrôleur de vue (probablement votre fenêtre). C'est pourquoi vous obtenez un écran vide.

Vous souhaiterez probablement conserver une référence autour de la vue d'origine, puis l'échanger vers la nouvelle vue en définissant la vue du contrôleur de vue sur la nouvelle vue.

// origView is an instance variable/IBOutlet to your original view. 
- (IBAction)switchToPhoneView:(id)sender { 
    if (origView == nil) 
    origView = self.view; 
    self.view = phoneViewController.view; 
} 

- (IBAction)switchToOriginalView:(id)sender { 
    self.view = origView; 
} 
+0

En fait, je l'ai fait de la appdelegate et tout a fonctionné. Il est basé sur ce post: http://www.iphonedevsdk.com/forum/iphone-sdk-development/4052-have-someone-example-uibutton-switch-view-i-am-despair.html. Je pense définitivement que ton chemin est plus propre. – Atma

1

La technique que je l'habitude d'utiliser consiste à créer une classe superview qui contient une barre d'outils en bas, et une classe afficher le contenu de UIView remplir le reste de l'écran. Puis, j'ajoute des sous-vues à la vue du contenu pour modifier les vues en fonction des clics sur les boutons. Cette approche fait en sorte que la barre d'outils sur le même est constante sur toutes les vues. Je commence par la définition d'une fonction d'aide comme ceci:

-(void) clearContentView { 
    //helper to clear content view 
    for (UIView *view in [self.contentView subviews]){ 
     [view removeFromSuperview]; 
    } 
} 

Mon IBAction ressemble alors à ceci:

-(IBAction) buttonClicked{ 
    self.title = @"Images"; //change title of view 
    [self clearContentView]; //clear content view 
    [self.contentView addSubview:self.imagesViewController.view]; //add new view 
    [self.imagesViewController viewWillAppear:YES]; //make sure new view is updated 
    [self enableButtons]; //enable all other buttons on toolbar 
    self.imagesButton.enabled = NO; //disable currently selected button 
} 
Questions connexes