2010-07-24 4 views
0

J'ai donc deux sous-vues dans ma vue principale. J'ai créé chaque sous-vue en accédant à la bibliothèque dans IB et en faisant glisser une vue sur mon fichier nib principal, puis en positionnant des contrôles sur celles-ci.IPhone: Comment basculer entre les sous-vues qui ont été créées dans Interface Builder

Maintenant, je voudrais basculer entre ces vues via un bouton "flip". Ce que je ne comprends pas, c'est comment je peux le faire par programme.

Ma question est la suivante: est-ce que je "cache" l'une des sous-vues et que je la masque de façon programmatique quand je fais le flip? Est-ce que je donne un nom à chacun via Interface Builder et le fais de cette façon? Je n'ai pas vraiment besoin du code pour faire le flip ou quoi que ce soit, j'ai juste besoin d'une compréhension conceptuelle de comment je ferais référence aux vues construites dans IB par programmation et si la dissimulation a du sens dans mon scenerio ...

suggestions? merci

Répondre

6

Vous connecter à des choses à IB en utilisant
IBOutlet UIView *myView;
ou
@property (nonatomic, retain) IBOutlet UIView *myView;
dans votre fichier d'en-tête. Le mot clé IBOutlet indique à IB de rendre ce point de vente disponible pour se connecter.

Vous faites la connexion réelle dans l'inspecteur de connexion en faisant glisser de la sortie à la vue: (. Est-ce que cela pour les deux votre point de vue) making a connection http://cl.ly/eb3b5cd826b20fc9e307/content

Note: votre point de vue ne sont pas être à l'intérieur de la fenêtre dans IB. Vous pouvez les créer à l'extérieur, et ils ne seront pas affichés jusqu'à ce que vous le vouliez. Vous souhaiterez peut-être en ajouter un pour l'afficher lors du lancement de votre application.

Ensuite, lorsque vous voulez vraiment retourner à l'autre point de vue, en supposant que vous utilisez iOS 4.0, il est simple (il existe des méthodes pour 3.x et inférieure, mais est le plus facile):

[UIView transitionFromView:myView1 
        toView:myView2 
        duration:0.2 
        options:UIViewAnimationOptionTransitionFlipFromRight 
       completion:^{ 
        // something to do when the flip completes 
       }]; 

Ou, si vous voulez déterminer dynamiquement quelle vue est déjà visible:

UIView *oldView, *newView; 
UIViewAnimationOptions transition; 
if (myView1.superview) { // view 1 is already visible 
    oldView = myView1; 
    newView = myView2; 
    transition = UIViewAnimationOptionTransitionFlipFromRight; 
} else { // view 2 is visible 
    oldView = myView2; 
    newView = myView1; 
    transition = UIViewAnimationOptionTransitionFlipFromLeft; 
} 
[UIView transitionFromView:oldView 
        toView:newView 
        duration:0.2 
        options:transition 
       completion:^{ 
        // something to do when the flip completes 
       }]; 
+0

Merci pour votre explication détaillée. Je ne comprends pas très bien ce que vous vouliez dire en créant les vues en dehors du fichier nib principal. J'aimerais pouvoir créer une vue dans IB mais je pensais que je ne pouvais le faire qu'à l'intérieur de ma plume principale. Peut-être qu'il me manque quelque chose ...? – foreyez

+0

Pas en dehors du fichier nib principal, mais en dehors de la fenêtre. Notez dans ma capture d'écran comment "My View 1" est dans la liste avec le reste des objets de la nib - il n'est pas réellement placé à l'intérieur de la fenêtre.Vous devriez utiliser ceci à votre avantage afin qu'une seule des vues soit à l'écran (dans la fenêtre) à la fois. – jtbandes

+0

Ok, je vous attrape. J'ai réalisé cela en faisant glisser ma sous-vue de l'intérieur de ma fenêtre principale à l'extérieur où votre capture d'écran montre. (Je ne savais pas que je pouvais faire ça!) – foreyez

2

Les animations sont effectuées par programme. (Toujours) Vous avez donc besoin d'une référence

en vous @interface écrire quelque chose comme ceci:

IBOutlet UIView subview1; 
IBOutlet UIView subview2 
IBOutlet UIView mainView; //this depends on your structure, may be self or if you are in a controller self.view 

Vous devez connecter ces références vues avec les vues iB.

alors à l'intérieur juste faire l'action (méthode) du bouton:

[mainView bringSubviewToFront:subview1]; 

Si vous avez besoin d'animations, vous pouvez vérifier le code du projet Utitlies modèle de Xcode.

Questions connexes