11
votes

Comment charger un XIB?

J'ai une application avec 2 écrans (MainViewController et AgreviewController). Lors de l'utilisateur, cliquez sur un bouton, je souhaite charger l'écran AgutationViewController, défini dans une autre XIB.

semble simple, mais je ne peux pas sembler trouver mon Google-fu aujourd'hui. Comment puis-je retirer cela?


0 commentaires

3 Réponses :


0
votes

nsbundle loadnibnamed:


0 commentaires

30
votes

Lorsque vous appelez [Abrutéviewcontroller init] , il est censé appeler une forme de [super init] , qui est un synonyme de [uiviewontroller init] < / code>. Lorsque cela se produit, votre contrôleur d'affichage recherchera automatiquement un fichier NIB appelé (dans votre cas) Agreviewcontroller.xib . S'il trouve ce fichier, il charge son contenu dans votre contrôleur d'affichage pour vous.

Donc, fondamentalement, tout ce que vous avez à faire est d'initialiser votre contrôleur d'affichage et assurez-vous qu'il a le même nom que le fichier NIB associé.

Si vous vouliez charger un fichier NIB avec un nom différent dans votre contrôleur d'affichage, vous pouvez appeler explicitement initwithnibname: Bundle: avec le nom de la nibile Vous aimez.

Si l'init standard (avec un fichier NIB de même nom) ne fonctionne pas pour vous, il y a quelques choses que vous pourriez vérifier.

  • L'orthographe du nom de la classe est identique à l'orthographe (et au cas) du fichier NIB
  • Le fichier NIB est inclus dans le projet et non seulement assis dans le même répertoire
  • Votre uiviewcontroller La méthode init de la sous-classe appelle également [super init]
  • Vous appelez votre UIVIEWCONTROLLER La méthode init de sous-classe
  • Vous faites effectivement la vue de votre contrôleur de vue visible

1 commentaires

Je n'avais aucune idée xibs ont été automatiquement chargés comme ça. Merci!



11
votes

Avec un écran à propos de l'écran, vous voulez probablement simplement montrer une vue, puis le rejeter. Donc, plutôt que d'utiliser un tout nouveau contrôleur d'affichage, vous pouvez simplement couvrir la vue actuelle.

supposer que vous avez un ivar p> xxx pré>

avec la propriété appropriée. P> Dans votre affichage Contrôleur DO: P>

[aboutUsView removeFromSuperview], aboutUsView = nil;  // Releases the view


3 commentaires

Il a spécifiquement dit qu'il avait deux contrôleurs d'affichage, "MainViewController et à propos deViewController" Pas un contrôleur d'affichage et une vue.


Correct. Et j'ai expressément dit qu'il n'aurait peut-être pas besoin d'entre eux pour atteindre son objectif déclaré.


Cela semble la méthode évidente.