iPhone: l'extension d'une classe UIView

creato. Je veux montrer comment il est possible, d'une manière simple et rapide, étendre une classe UIView donc qui répond à une nouvelle méthode d'initialisation contenant un code supplémentaire pour personnaliser l'objet UIView créé. Comme certains d'entre vous le savez probablement, Objective-C ne supporte pas un seul fabricant comme dans d'autres langages orientés objet (comme Adobe ActionScript ou PHP5). E 'peut, en effet, de créer une instance d'une classe manuellement en appelant divers fabricants (virtuellement infini). . Normalement, nous sommes habitués à créer des objets UIView avec le classique initWithFrame . Supposons, cependant, veulent créer une nouvelle classe d'objets visuels, à partir d'un UIView , avec quelques ajouts, par exemple une étiquette incorporée. . Fondamentalement, ce que nous voulons, c'est que notre objet instancier ce qui crée, ainsi que le UIView , également un objet de type UILabel . Par exemple, on peut vouloir obtenir à la fin:

1
[ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel * vl = [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) Label: @ "Bonjour"];

: Pour ce faire il suffit de créer une nouvelle classe de type UIView et appel ViewLabel :

1
2
3
4
5
6
7
8
9
10
11
12
13
/ /
/ / ViewLabel.h
/ /

# Import <UIKit/UIKit.h>

UIView { @ Interface ViewLabel: UIView {
UILabel * internalLabel;
}

id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine; - (Id) initWithLabelDefine: (CGRect) étiquette d'image: ( NSString *) labelDefine;

@ Fin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/ /
/ / ViewLabel.m
/ /

# Import "ViewLabel.h"

@ Mise en œuvre ViewLabel

id ) initWithFrame : ( CGRect ) frame { - (Id) initWithFrame: (CGRect) frame {

self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: IMAGE]) {
Code / / Initialisation
}
retourner soi-même;
}

/ /
/ / Notre nouvelle initialisation
/ /
id ) initWithLabelDefine : ( CGRect ) frame label : ( NSString * ) labelDefine { - (Id) initWithLabelDefine: (CGRect) étiquette d'image: ( NSString *) {labelDefine

self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: IMAGE]) {
/ / Ici, vous pouvez décider de la façon de se comporter, I pour
/ / Sécurité j'ai eu le même cadre dans le passé
/ / Input mais je réinitialiser le X et Y
; frame.origin.x = 0;
; frame.origin.y = 0;
UILabel alloc ] initWithFrame : frame ] ; internalLabel = [[UILabel alloc] initWithFrame: châssis];
internalLabel.text = labelDefine;
internalLabel ] ; [Self addSubview: internalLabel];
; [InternalLabel release];
}
retourner soi-même;
}

void ) drawRect : ( CGRect ) rect { - (Void) drawRect: (CGRect) rect {
Code / / Dessin
}

void ) dealloc { - (Void) dealloc {
; [Super dealloc];
}

@ Fin

Au moment de la création de notre nouvelle classe, nous pourrions utiliser:

1
[ [ ViewLabel alloc ] initWithLabelDefine : CGRectMake ( 0 , 0 , 320 , 80 ) label : @ "Ciao" ] ; ViewLabel * vl = [[ViewLabel alloc] initWithLabelDefine: CGRectMake (0, 0, 320, 80) Label: @ "Bonjour"];

Il n'y a aucun commentaire pour cet article

Laisser un commentaire

TAG XHTML PERMIS: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> entrée du code:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL