iPhone: étendre une classe UIView

creato. Je veux montrer comment vous pouvez facilement et rapidement étendre une classe UIView d'une manière qui répond à une nouvelle méthode d'initialisation contient du 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 les langages orientés objet d'autres (comme Adobe ActionScript ou PHP 5). Il peut, en effet, créer une instance d'une classe appelant manuellement différents fabricants (virtuellement infini). . Normalement nous sommes habitués à créer des objets UIView avec le classique initWithFrame . Mais imaginez que vous souhaitez créer une nouvelle classe d'objets visuels, à partir d'un UIView , avec quelques ajouts, comme une étiquette intégrée. . Fondamentalement, ce que nous voulons, c'est que l'instanciation de notre objet qu'il crée, ainsi que les UIView , un objet de type UILabel . Par exemple nous pourrions arriver à 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 appeler 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: étiquette d'image (CGRect): ( 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 oeuvre ViewLabel

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

self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: IMAGE]) {
/ / Initialisation du code
}
le retour de soi;
}

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

self = [ super initWithFrame : frame ] ) { if (self = [super initWithFrame: IMAGE]) {
/ / Ici vous pouvez décider quoi faire, I pour
/ / J'ai eu le même cadre de sécurité dans le passé
/ / Entrée mais je réinitialiser le X et Y
; frame.origin.x = 0;
; frame.origin.y = 0;
UILabel alloc ] initWithFrame : frame ] ; internalLabel = [[UILabel alloc] initWithFrame: cadre];
internalLabel.text = labelDefine;
internalLabel ] ; [Self addSubview: internalLabel];
; [InternalLabel release];
}
le retour de soi;
}

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

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

XHTML TAG PERMIS: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> CODE D'INSERTION:
 <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