Question

J'ai créé une sous-classe UIView et le fichier correspondant xib où j'ai mis quelques UILabels et UIImageViews. Je veux mettre ensuite plusieurs copies de ce UIView personnalisé dans un UIViewController.

Quand je fais cela, ils apparaissent vides dans le constructeur d'interface et ne semblent pas lorsque les charges de l'application. Quelles méthodes ai-je besoin de mettre en œuvre sur la sous-classe UIView pour faire ce travail?

Était-ce utile?

La solution

La méthode la plus simple est de loin pour créer une plume avec jeu de fichier propriétaire à NSObject, contenant une vue contenant votre élément de mise en page.

Ensuite

NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:nil options:nil];
UIView *fv = [[arr objectAtIndex:0] retain];

// now you have the view, do something with it:
fv.center = CGPointMake(100,100);
[self.view addSubview:fv];

Pas besoin de quoi que ce soit avec le propriétaire du fichier; il est même fixé à zéro ici.

Autres conseils

Ceci est similaire à l'aide d'un fichier nib pour créer des cellules vue tableau. ici est une page qui explique comment faire.

Vous aurez besoin de mettre une prise dans votre sous-classe UIViewController pour la vue personnalisée et définir la sous-classe UIViewController que le fichier « propriétaire du fichier » dans votre nib vue personnalisée (.xib). Branchez ensuite la sortie que vous avez créé à l'objet de vue au niveau supérieur (encore une fois dans votre fichier nib de vue personnalisée).

Ensuite, chaque fois que vous voulez instancier votre vue personnalisée dans votre vue code du contrôleur, appel:

[[NSBundle mainBundle] loadNibNamed:<custom view nib name> owner:self options:nil];

La sortie que vous avez ajouté sera alors fixé à un point d'une nouvelle instance de votre vue personnalisée.

Le seul inconvénient de cette approche est que vous devrez mettre les instances de votre vue personnalisée dans votre contrôleur de vue plutôt que graphiquement programatically dans le constructeur d'interface.

Une autre approche créerait les étiquettes de vente et des images dans votre sous-classe programatically de UIView, et vous pouvez l'ajouter à l'interface constructeur comme vous le feriez pour tout autre sous-classe UIView.

Modifier :. Malheureusement, dans Xcode 4.0, cette capacité a été supprimée

Une fois que vous avez votre sous-vue configuré dans Interface Builder, vous pouvez créer un nouveau groupe (utilisez le bouton COG en bas de la fenêtre de la bibliothèque) et faites glisser votre objet sous-classe (contenant vos images et vos étiquettes) de la vue de la liste (par exemple pas la vue de la mise en page) Retour à la fenêtre de la bibliothèque.

Vous pouvez ensuite ajouter graphiquement plusieurs instances de votre sous-classe de vue de toute vue constructeur d'interface ou d'une fenêtre comme vous le feriez avec les objets intégrés dans la bibliothèque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top