J'utilise un UINavigationController pour passer d'une vue à l'autre. Ce que je voudrais, c'est que chaque vue ait la possibilité de contrôler quand elle est permutée pour une autre vue en ayant des boutons dans la vue. Tous les exemples que j'ai vus jusqu'ici ont placé des boutons sur une barre d'outils, qui est située sur la vue racine contenant le contrôleur Switch View plutôt que les vues, eux-mêmes. Est-il possible de faire ce que je veux? Je n'arrive pas à comprendre comment relier la connexion au UINavigationController. Je rencontre des difficultés à le faire, alors n'hésitez pas à me contacter si vous avez besoin de plus de précisions.iPhone: Commutation des vues depuis le contrôleur racine externe
Répondre
En savoir plus sur délégués. Les délégués sont une méthode courante pour signaler des choses d'objets à leurs «parents» ou à tout autre objet.
Vous devriez avoir une propriété "delegate" (on peut vraiment l'appeler n'importe quoi, c'est juste une convention) sur vos vues enfants. Vous pouvez avoir des boutons dans vos vues enfant.
Vous déclarez le délégué comme ceci:
interface ChildView : UIViewController {
id delegate;
}
@property (assign) id delegate;
implementation ChildView
@synthesize delegate;
Ensuite, lorsque vous configurez votre point de vue de l'enfant à l'intérieur de votre UINavigationController, vous faites:
ChildView *childView = [[ChildView alloc] init...]
childView.delegate = self;
l'intérieur de votre vue enfant, vous avez un bouton méthode:
- (IBAction) didPressButton:(id)sender {
[self.delegate didPressButtonToSwapView];
}
À l'intérieur de votre UINavigationController, vous avez une méthode:
- (void) didPressButtonToSwapView {
[self popViewController]; // use the right names, I made these up :)
[self pushAnotherViewController];
}
Vous devriez également lire sur des protocoles qui rendrait le code ci-dessus plus robuste et vous aiderait à vous assurer que vous appelez uniquement les bonnes méthodes sur délégué, mais je ne voulais pas compliquer cet exemple.
EDIT: oui, le moyen le plus propre de se débarrasser de l'avertissement est d'utiliser un protocole. Il suffit de mettre cela dans un fichier .h séparé:
@protocol SwitchingDelegate
- (void) didPressButtonToSwapView;
@end
Inclure cet .h dans l'en-tête UINavController et prononcez le UINavController implémente le protocole:
@interface MyNav: UINavController <SwitchingDelegate> { ...
Mettre en oeuvre la méthode dans la mise en œuvre (vous n pas besoin de rien de plus dans l'interface).
Dans votre ChildView, dire que le délégué doit mettre en œuvre le protocole: changer toutes les déclarations à:
id<SwitchingDelegate> delegate;
Le compilateur vous aide ensuite en vérifiant si le délégué des objets mettent réellement en œuvre le protocole. Vous ne devriez recevoir aucun avertissement lorsque vous avez terminé tout cela correctement.
- 1. Développement iPhone - Commutation Vues
- 2. iPhone SDK: commutation de vues navigationcontroller
- 3. iPhone/iPad - commutation Les vues causent des problèmes d'orientation
- 4. Contrôleur iPhone One, plusieurs vues
- 5. Modifier le dossier racine des vues
- 6. Commutation des vues - développement de l'iPhone
- 7. Où mettre le contrôleur de racine?
- 8. Un contrôleur de vue racine, gère toutes les autres vues?
- 9. iPhone Voir basiques de commutation
- 10. Commutation de vues dans la vue UITabBar
- 11. Commutation des onglets dans le contrôleur de la barre d'onglets
- 12. Logique des vues de l'application iPhone
- 13. iPhone - UINavigationController, réutilisation des vues?
- 14. contrôleur de rails de commutation
- 15. Modifier les sous-vues par programme depuis le contrôleur de la sous-vue
- 16. Commutation de plusieurs vues à l'aide d'un délégué
- 17. iPhone - ajouter des vues et l'orientation paysage
- 18. Ajout et commutation entre les sous-vues
- 19. MPMoviePlayerController disparaît après la commutation Vues
- 20. Vues de commutation d'un AlertView Boutons
- 21. Iphone commutation en mode paysage en mode Portraite sur le chargement nouveau contrôleur
- 22. Un UISplitViewController peut-il être le contrôleur racine d'un UINavigationController?
- 23. Appeler StreetView dans l'application IPhone Maps depuis l'application externe
- 24. Afficher le rendu vers un contrôleur externe?
- 25. Ajouter des vues secondaires dans le contrôleur de navigation
- 26. iPhone vue commutation - boucle transition
- 27. iphone-sdk, le partage des données entre plusieurs vues
- 28. iphone plusieurs vues
- 29. vues de référence iphone
- 30. Desservir des images depuis l'extérieur de la racine du document
Merci pour la réponse. Je pense vraiment que c'est sur la bonne voie, mais je reçois un avertissement sur [self.delegate didPressButtonToSwapView] parce que la méthode est introuvable. Ma vue doit-elle implémenter un protocole en commun avec UINavigationController? Merci encore ... – senfo
Il existe d'autres façons de se débarrasser de l'avertissement, mais le plus propre est de faire un protocole. J'ai ajouté quelques informations sur comment feriez-vous le protocole. – Jaanus
Cela a fonctionné parfait.Merci beaucoup pour votre aide. J'ai appris quelque chose de nouveau sur les protocoles. Ils diffèrent légèrement des interfaces C#, auxquelles je suis habitué. – senfo