2009-10-18 8 views
4

J'écris une application basée sur la vue, mais je suis un peu confus au sujet du chargement de mes vues. J'aimerais avoir quatre vues différentes chargées en même temps dans la même fenêtre. Je n'arrive pas à comprendre comment faire ça. Je préférerais tout faire par programme plutôt qu'avec le constructeur d'interface si possible.Plusieurs vues dans une fenêtre

Mes 4 vues sont: un UIView, un UIWebView, un UITableView et un autre UIView avec des boutons.

Merci d'avance pour l'aide.

+0

Pouvez-vous décrire plus en détail la façon dont ceux-ci sont disposés? Est-ce tout un seul écran? Peut-être poster un croquis de ce que vous essayez de faire? –

+0

Bien sûr. C'est essentiellement une vue empilée sur l'autre sur un écran en même temps. Chacun prend une partie de l'écran. Vous ne savez pas comment publier un croquis, désolé. – Adam

+0

J'ai trouvé comment poster une image, mais je n'ai pas assez de points de rep pour la mettre dans la question. Voici un lien: http://picasaweb.google.com/lh/photo/4UaoSlNbidugee6xVmuyyQ?authkey=Gv1sRgCOOl86zz4sHDOA&feat=directlink – Adam

Répondre

5

Les vues d'une application iPhone sont organisées hiérarchiquement, c'est-à-dire que chaque vue a une vue "parente" (à l'exception de la vue racine). Le bit intéressant ici est que UIWindow est lui-même une sous-classe de UIView, donc vous pouvez ajouter directement les quatre vues à votre fenêtre. (Cela peut ne pas être la meilleure approche, mais il est peut-être le plus simple.)

Tout ce que vous avez à faire est d'initialiser chacun de vos quatre vues par programmation avec l'emplacement et les dimensions que vous voulez qu'ils ont dans le UIWindow. Pour ce faire, attribuez à chaque vue un paramètre frame, dans la méthode init ou ultérieurement (en fonction du type de vue). Ainsi, par exemple, dans votre délégué app vous pouvez ajouter ce code:

CGRect frame = CGRectMake(0.0, 0.0, 100.0, 100.0); 
UIView *view = [[[UIView alloc] initWithFrame:frame] autorelease]; 
[window addSubview:view];

Cela va créer une vue 100x100 pixels et l'ajouter dans le coin supérieur gauche de la fenêtre. Vous pouvez faire des choses similaires pour chacune des trois autres vues. Notez que les développeurs n'initialisent généralement pas les vues directement dans le délégué de l'application - une meilleure approche pourrait être d'avoir une cinquième vue en tant que vue racine pour les quatre autres, puis d'ajouter cette vue racine à la fenêtre. Vous pouvez utiliser un contrôleur de vue pour la cinquième vue pour faciliter cette tâche: déplacez le code d'initialisation de la vue dans l'implémentation du contrôleur de vue, puis, à partir du délégué de l'application, installez le contrôleur de vue.

+0

Génial, merci! Ça a marché. J'ai remarqué que je devais tout décaler ou le couper. Je suppose que c'est à cause de la barre de titre. – Adam

+0

Et si vous créez une sous-classe UIView pour encapsuler ce truc, sa méthode layoutSubviews serait l'endroit pour faire le travail de positionnement des choses. Cela sera appelé à chaque fois que les dimensions de la vue changent, etc. –

+0

@Adam: la barre de titre occupe 20px et couvre la fenêtre. C'est l'une des choses pratiques à propos de l'utilisation d'un nouvel UIView en tant que racine plutôt que la fenêtre elle-même - vous pouvez utiliser (0,0) comme origine de coordonnées visibles, plutôt que (0,20). – Tim

0

Vous pouvez utiliser [self parentViewController] pour accéder au parent UIView

Questions connexes