En tant que débutant, IB et toutes les connexions possibles me déroutent. La plupart des tutoriels que j'ai trouvés sont ce que j'appellerais la réincarnation du code spaghetti, dans lequel l'intrication est l'ensemble des connexions créées par le glisser. Bien sûr, je veux utiliser IB pour la mise en page des vues (dimensionnement & en plaçant des éléments visuels), c'est ce que IB est idéal pour. Mais un contrôleur n'est pas une vue, donc c'est moins déroutant si tous mes contrôleurs sont uniquement du code et n'apparaissent nulle part dans IB. Je soupçonne que cela minimisera les spaghettis. Il encourage également l'admonestation one-xib-per-view. À cette fin, et voici la question, où puis-je trouver des exemples de projets qui adhèrent à cette stratégie?Comment garder les contrôleurs hors de xib
Répondre
Bonne question. Le modèle que j'essaye de coller est de faire le contrôleur dans le code, en ajoutant IBOutlets et IBActions pour les choses dans le XIB/NIB qui interagissent avec ce code, et une chose dans le constructeur du contrôleur qui charge le XIB/NIB avec "self" comme le propriétaire, et dans IB je connecte des choses à l'espace réservé "File's Owner", dont j'aurai spécifié l'identité comme étant la classe de mon contrôleur.
Je n'ai pas un ensemble de projets exemples, mais je vais vous donner quelques informations sur la façon dont les choses fonctionnent et quand vous devriez créer des contrôleurs dans un fichier XIB ou dans le code.
Si vos contrôleurs sont créés dynamiquement à l'aide de l'action d'un utilisateur, vous ne les instanciez généralement pas dans un fichier XIB. Au lieu de cela, vous allez les instancier dans le code comme les mentions ci-dessus. Une fois cela fait, vous aurez toujours besoin d'un mécanisme pour connecter ce contrôleur qui a été créé en code, aux éléments de l'interface utilisateur que vous avez créés dans IB.
Le mécanisme fourni par IB pour résoudre ce problème est le propriétaire du fichier. La maîtrise du propriétaire du fichier est essentielle pour «obtenir» Interface Builder.
Le propriétaire du fichier n'est pas un objet "dans" le fichier XIB, c'est un objet représenté dans le fichier XIB. C'est un espace réservé pour un objet qui existera déjà lorsque le fichier XIB est chargé. Lorsque les fichiers NIB sont chargés au moment de l'exécution, ils sont chargés avec la méthode NSBundle - [NSBundle loadNibNamed: ownwer: options:]. Le paramètre owner est utilisé pour résoudre l'objet espace réservé propriétaire du fichier dans le fichier XIB/NIB. Lorsque le fichier est chargé au moment de l'exécution, toutes les connexions effectuées avec le propriétaire du fichier seront résolues par rapport à l'objet que vous avez transmis en tant que paramètre owner à la méthode NSBundle. Sur l'iPhone, vous ne chargez généralement pas le fichier NIB vous-même. Au lieu de cela, UIViewController le fait pour vous. L'implémentation par défaut de la méthode de loadview de UIViewController pourrait ressembler à ceci:
- (void)loadView {
[[self nibBundle] loadNibNamed:[self nibName] owner:self options:nil];
}
Ainsi, en reliant les éléments dans votre fichier XIB au propriétaire du fichier, vous serez les connecter à votre contrôleur de vue.
Vous aurez des contrôleurs qui sont statiquement dans votre application - ils seront vivants pour toujours. Un contrôleur de navigation ou de tabulation avec ses éléments racine sont généralement actifs pendant toute la durée de vie de leur application. Lorsque c'est le cas, je définirais ces contrôleurs de vue dans le fichier MainWindow.xib. La plupart des autres contrôleurs seraient créés dynamiquement, et programmés en réponse à l'utilisateur de faire les choses.
- 1. Comment charger un XIB?
- 2. Comment sont les 2 contrôleurs de vue câblés au tabBarController dans iPhoneRecipes
- 3. Comment garder les onglets Visual Studio triés
- 4. Comment nommer les contrôleurs Asp.net Mvc?
- 5. Comment comparer/fusionner des fichiers XIB?
- 6. Erreur du compilateur XIB
- 7. ASP.NET MVC: Structurer les Contrôleurs
- 8. Choisir entre les contrôleurs de vue
- 9. Comment redimensionner les images hors serveur
- 10. comment garder les éléments en ligne de l'emballage?
- 11. Outil pour visualiser les différences structurelles de xib?
- 12. Les contrôleurs de rails sont-ils multithreadés? Thread.exclusive dans les contrôleurs
- 13. Comment faire la transition entre les contrôleurs de vue
- 14. comment garder combinaison de cellules uniques
- 15. UIToolBar single Contrôleurs de vue et contrôleurs de vues multiples
- 16. Comment changer XIB dans une application de barre d'onglets?
- 17. Comment garder sons Pour BOUTONS
- 18. Comment résoudre Var hors de portée dans les appels setTimeout
- 19. Rails: Garder les contrôles d'usurpation d'utilisateur DRY
- 20. Contrôleurs de groupe pour les paquets fonctionnels dans les Grails
- 21. Garder les branches en phase avec Git
- 22. Cron travail: garder les 20 dernières lignes
- 23. Comment lister par programme tous les contrôleurs dans Rails
- 24. Comment les contrôleurs séparés doivent-ils accéder au modèle?
- 25. Comment tester les contrôleurs avec CodeIgniter PART 2?
- 26. Dans Rails, comment utilisez-vous les contrôleurs RESTful avec Haml?
- 27. Modèle de partage de fonctionnalités entre les contrôleurs
- 28. Quelle est la différence entre un View XIB et un XIB vide?
- 29. Garder les fichiers point synchronisés sur les machines?
- 30. modèles pour les contrôleurs dans l'application MVC
Merci, Jon, c'est une information utile. Je veux toujours essayer la stratégie consistant à ne jamais avoir de contrôleurs du côté IB. Seriez-vous d'accord que c'est faisable? Je suis toujours à la recherche d'exemples de code ... – bedouger
Tout est faisable. Mais je recommanderais l'approche que j'ai énumérée ci-dessus. Créez des contrôleurs statiques dans le fichier MainWindow.xib et créez la plupart (généralement tous) de l'autre contrôleur dans le code en réponse aux actions de l'utilisateur. –