Vous avez plusieurs options, en fonction de la façon dont votre "baseView" la classe est destinée à être utilisée et intégrée à votre application. Il n'est pas clair à quel point vous avez l'intention d'utiliser cette classe -- comme le point de vue dans une sous-classe UIViewController, ou réutilisable, modulaire signifie d'être instancié plusieurs fois tout au long de votre application, pour une utilisation dans de nombreux point de vue différent des contrôleurs.
Si votre vue est destiné à être le seul point de vue dans une sous-classe UIViewController, puis Phonitive est correct -- le bundle avec la sous-classe UIViewController .xib fichier et utiliser la UIViewController de viewDidLoad faire initialisation.
Mais si vous voulez que votre point de Vue de la classe à un sous-composant réutilisé plusieurs fois dans différents contrôleurs de vue, intégré, soit par un code ou par l'inclusion dans un .xib fichier d'un autre contrôleur, alors vous avez besoin pour mettre en œuvre le initWithFrame: méthode init, et awakeFromNib, à manier les deux cas. Si votre interne de l'initialisation de certains objets .xib, puis dans votre initWithFrame vous devrez charger votre .xib manuellement afin de soutenir le "client" classes que vous voulez créer votre widget via le code. Et de même, si un .xib fichier contient votre objet, puis vous aurez besoin pour vous assurer d'appeler n'importe quel code-requis finalisation de awakeFromNib.
Voici un exemple de comment créer une sous-classe UIView composant avec la conception de l'INTERFACE utilisateur dans une plume.
Mavue.h:
@interface MyView : UIView
{
UIView *view;
UILabel *l;
}
@property (nonatomic, retain) IBOutlet UIView *view;
@property (nonatomic, retain) IBOutlet UILabel *l;
Mavue.m:
#import "MyView.h"
@implementation MyView
@synthesize l, view;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// Initialization code.
//
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
- (void) awakeFromNib
{
[super awakeFromNib];
// commenters report the next line causes infinite recursion, so removing it
// [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
- (void) dealloc
{
[l release];
[view release];
[super dealloc];
}
Voici ce que la plume de fichier ressemble (sauf que le propriétaire du fichier doit être modifié pour Mavue classe).
assurez-vous de brancher à la fois de la vue et de magasins de marque de Propriétaire du Fichier. Ça y est! Un modèle pour la création de ré-utilisable UIView widgets.
La seule chose vraiment bien sur cette structure, c'est que vous pouvez placer des instances de votre Mavue objet dans d'autres nib fichiers, il suffit de placer une UIView à l'emplacement/la taille que vous voulez, puis changer la classe de l'identité de l'inspecteur (CMD-4) à Mavue, et boum, vous avez une instance de votre widget quelle que soit la vue que vous voulez! Tout comme UIKit objets que vous pouvez mettre en œuvre délégué protocoles de sorte que les objets à l'aide de votre widget d'être informé des événements intéressants, et peut fournir des données à afficher dans le widget pour le personnaliser.