2009-10-23 5 views
0

Disons que j'ai un ViewController qui doit accéder à une vue. Dans le fichier de classe du ViewController que je faisiPhone: Accès aux objets de vue à partir d'un ViewController dans le code

IBOutlet ViewA *someview; 

Et dans Interface Builder, je fais glisser et déposer un UIView dans mon document et définir la classe à ViewA.

Il me manque comment "truc" est instancié lorsque vous vous connectez via IB. ViewA est-il automatiquement alloué lorsque les fichiers .xib sont désarchivés? Que faire si je ne veux pas utiliser IB?

Répondre

1

Si vous ne souhaitez pas utiliser IB, au lieu de mettre ce IBOutlet là, vous éliminez juste, ne laissant que

ViewA *someview; 

puis quelque part dans votre code, lorsque vous avez besoin de la vue, vous un

someView = [[UIView alloc] initWithFrame: rect]; 

Je préfère IB, d'autres préfèrent créer des vues par programme. J'aime comment je peux positionner toutes les sous-vues vues, y compris UIButtons, UILabels, UITableViews, d'autres UIViews, etc. sans avoir à utiliser de coordonnées pour le faire. YMMV. Quand les choses sont instanciées, lorsque vous utilisez un XIB, votre application chargera paresseusement le contrôleur de vue, et une fois qu'il est chargé, il chargera votre vue. Ce qui charge réellement votre vue, c'est lorsque vous accédez pour la première fois à la variable someView. Bien qu'il existe une connexion de sortie, la vue et ses sous-vues ne sont pas chargées jusqu'à ce que vous accédiez à someView, de quelque manière que ce soit, par exemple si vous faites simplement:

if (someview) { 
    // the view is loaded now 
} 
Questions connexes