2009-05-25 8 views
0

Je voudrais avoir une vue apparaît lorsque l'utilisateur clique sur un bouton. La hiérarchie je ressemble à ceci:Ajout d'un sous-vue en vue hiérarchique

MainWindow

-UIView 
--ScrollView 
---ScrollView.pages = UIViews 
----UIView (from above assignment) 
----TextView 
----InfoButton 

pages est un NSMutableArry d'objets PageController. Ces crochets à une plume. Ces plumes sont les pages que l'utilisateur parcourt dans la vue déroulante.

Le clic InfoButton est câblé comme ceci:

- (IBAction) infoButton_click:(id)sender{ 
topView topViewViewController *topView = [[topViewViewController alloc] initWithNibName:@"TopView" bundle:[NSBundle mainBundle]]; 
//[self.navigationController pushViewController: topViewView animated:YES]; 
//[self.view addSubview: topViewView.view]; 
[super.view addSubview: topViewView.view]; 
[topViewView release]; 
} 

InfoButton est sur l'une des pages du ScrollView. J'ai commenté le code différent qui a été essayé. Rien de tout cela ajoute la vue. Rien ne se passe. Existe-t-il un moyen d'obtenir TopView en tant que vue de dessus dans la hiérarchie?

Répondre

2

est votre objectif d'ajouter le point de vue en tant que sous-vue, ou de glisser sur une nouvelle vue à l'aide du contrôleur de navigation? Je vais assumer ce dernier pour le moment.

- (IBAction)infoButton_click:(id)sender 
{ 
    TopViewController *topViewController = [[TopViewController alloc] initWithNibName:@"TopView" bundle:nil]; 
    [self.navigationController pushViewController:topViewController animated:YES]; 
    [topViewController release]; 
} 

Ceci est correct si vous avez réellement un contrôle de navigation. Assurez-vous de le faire. Quand "rien ne se passe" dans Cocoa, cela signifie généralement que quelque chose est nul. Vous devez vérifier dans le débogueur ou avec NSLog() pour voir si l'une de ces valeurs est nulle. Il est possible (même probable), que votre parent a un contrôle de navigation, mais vous ne le faites pas.

Les classes doivent toujours avoir un capital de premier plan. Ne créez pas une variable appelée "vue" de la classe "UIViewController". C'est un chemin sûr vers la souffrance. Objective-C est un langage dynamique avec des vérifications limitées du compilateur sur les types. Nommer les choses correctement est essentiel pour une programmation efficace dans ObjC.

+0

Ceci est sur l'iPhone (Cocoa Touch). Ce n'est pas un contrôleur de navigation. C'est une application basée sur la vue. J'ai essayé le code que vous montrez, comme indiqué dans mon OP, mais cela ne fonctionne pas. – 4thSpace

+0

Alors, quel est votre objectif actuel? Comment souhaitez-vous que "TopView" apparaisse? Est-ce que cela devrait faire partie du scrollview existant (et si oui, où?), Devrait-il glisser de dessous ou voulez-vous glisser vers la droite pour le voir? Ce n'est pas clair ici ce que ScrollView.pages est dans votre diagramme. Est "super" cette "pages" ou est-ce le UIScrollView réel? –

+0

Je souhaite appuyer sur le bouton d'information et faire apparaître une autre vue. Ce serait bien si cela pouvait apparaître comme un flip comme dans les applications Star Trek. Mais glisser dedans est bien. Une fois cette vue affichée, l'utilisateur ne devrait plus pouvoir glisser/glisser. C'est une vue des paramètres/informations. Donc je pense que ça ne fait plus partie de UIScrollView. L'utilisateur cliquera alors sur Terminé et retournera à la vue déroulante. J'ai édité l'OP pour décrire les pages. Je ne suis pas sûr de la "super" question. Peut-être que ces clarifications aideront. S'il vous plaît, faites-moi savoir. Merci. – 4thSpace

1

Sur la base de votre commentaire à une réponse précédente, vous voulez présenter une vue modale. Pour ce faire, créez une nouvelle vue "modalView" et appelez [topView presentModalViewController:modalView animated:YES]. Dans une prochaine version de l'iPhone OS, que je ne pourrais évidemment pas commenter si elle était sous NDA, vous pourriez présenter un contrôleur de vue modale avec une transition de flip en définissant une propriété sur la vue contrôleur à présenter, qui serait probablement appelé modalTransitionStyle ou somesuch.

Questions connexes