2011-12-10 3 views
2

Je souhaite créer ma propre bibliothèque d'interface utilisateur contenant plusieurs contrôles réutilisables. Un très simple pourrait être un LabeledView qui contiendra un UIView (très probablement un UIImageView) et un UILabel ci-dessous.iOS: Charger un UIView personnalisé à partir d'une plume

---------------- 
| outer UIView | 
| ------------ | 
| |   | | 
| | UIView | | 
| |   | | 
| ------------ | 
| | UILabel | | 
| ------------ | 
---------------- 

Comment puis-je implémenter dans Interface Builder et « injecter » la UIView intérieure et UILabel lors de la création du UIView externe? J'ai le UIView externe en tant que propriétaire du fichier et le UIView interne et le UILabel connecté avec IBOutlets aux propriétés dans mon LabeledView. Je suis maintenant une fonction imaginer comme initialisation:

[[LabeledView alloc] initWithView:(UIView *)theView andLabel:(UILabel *)theLabel] 

Cette méthode devrait charger la vue depuis la pointe avec sa mise en page définie et insérez theView et theLabel en elle. Cela ne pouvait pas être dur, non? Je ne comprends pas ...

Répondre

1

Si vous avez défini les vues etc dans une plume, vous pouvez les ajouter à l'exécution en utilisant loadNibNamed: décrit ici: http://developer.apple.com/library/ios/documentation/uikit/reference/NSBundle_UIKitAdditions/Introduction/Introduction.html

Ce retourne un tableau, le premier objet est être l'objet de niveau supérieur dans la plume - la vue de votre conteneur dans l'exemple ci-dessus.

Vous n'utilisez pas alloc/init lorsque vous chargez des objets à partir d'une plume, car la plume elle-même contient une version sérialisée de l'objet, qui est déjà instanciée.

+0

Oui, j'ai compris.Mais j'ai le UIView interne et le UILabel avant de créer l'UIView externe de cette plume et je veux "injecter" ceux-ci afin qu'ils adaptent la disposition et la taille de la plume. – cschuff

+0

Je supposais que la vue intérieure et l'étiquette faisaient partie de la plume. Vous avez dit que ce sont des prises qui sont connectées à la vue extérieure, qui est le propriétaire du fichier, donc elles doivent faire partie de la plume. Je ne comprends pas ce que vous demandez, pouvez-vous me donner plus d'informations? – jrturton

+0

Je ne veux pas que la plume crée la sous-vue et l'étiquette. Je veux utiliser une vue et une étiquette qui a été créée auparavant. La vue et l'étiquette dans la plume devraient juste agir comme des espaces réservés. Je peux ajouter la vue et l'étiquette créées précédemment afin qu'elles héritent de la disposition et des propriétés de la plume. Je suis arrivé à la conclusion que ce n'est probablement pas du tout possible et que j'ai besoin d'implémenter la mise en page moi-même ... – cschuff

0

Cela peut vous aider à créer une sous-classe UIView indépendante avec ses propres méthodes et méthodes. En outre, ils seront signifie que vous pouvez les utiliser partout indépendamment du `propriétaire du fichier », dans votre code.

Suivez ces étapes

  • Laissez le champ propriétaire du fichier vide.
  • Cliquez sur la vue réelle xib fichier de votre CustomView et définir sa classe personnalisée comme CustomView (nom de votre classe de vue personnalisée)
  • Ajouter IBOutlet dans le fichier .h de votre vue personnalisée
  • En fichier .xib de votre vue personnalisée, cliquez sur afficher et aller en Connection Inspector, ici vous aurez tous votre IBOutle ts que vous définissez dans le fichier .h
  • Connectez-les avec leur vue respective.

  • Dans le fichier .m de votre classe CustomView, remplacer la méthode init que suivre

    - (CustomView *) {initialisation CustomView résultat = nul; NSArray elements = [[NSBundle mainBundle] loadNibNamed: NSStringFromClass ([self class]) propriétaire: self options: nil]; pour (id anObject dans les éléments) { if ([un objet isKindOfClass: [self class]]) { result = anObject; pause; } } renvoyer le résultat; Maintenant, lorsque vous souhaitez charger votre CustomView, utilisez la ligne de code suivante [[CustomView alloc] init];

Questions connexes