iPhone: la propriété tag le plus utile

Tous les objets qui dérivent de <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView">UIView</a> héritent des propriétés utiles <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW25">tag</a> Cette propriété est un véritable utilisateur de données (une «place» que le développeur utilise à des fins générales) de type <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html#//apple_ref/doc/c_ref/NSInteger">NSInteger</a> Alors, où nous pouvons stocker que des nombres.

Les usages auxquels ils peuvent dépend évidemment des circonstances cependant, il est utile d'identifier un objet en particulier de prendre une occurrence commune. Par exemple, imaginez que vous avez deux <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIAlertView_Class/UIAlertView/UIAlertView.html">UIAlertView</a> répondre à un même événement:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/ / Première alerte
[ [ UIAlertView alloc ] initWithTitle : @ "Primo" message : @ "Primo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Première" message: @ "First Alert" délégué: cancelButtonTitle auto: @ "OK" otherButtonTitles: néant, de néant];
; [Alerte] montrent;
; [Communiqué Alerte];

/ / ...

/ / Alert deuxième
[ [ UIAlertView alloc ] initWithTitle : @ "Secondo" message : @ "Secondo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "deuxième" message: @ "deuxième alerte« délégué: cancelButtonTitle auto: @ "OK" otherButtonTitles: néant, de néant];
; [Alerte] montrent;
; [Communiqué Alerte];

/ / Événement
/ / Cliccandi bouton OK de cette fonction sera appelée Alter
void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex
/ / TODO
}

Remarque: les exemples de code en C + +, vous trouverez les directions. Ce n'est pas tout à fait correcte, car, comme vous le savez, le langage est Objective-C. Cela est dû au fait que les plugins que j'utilise pour afficher le code source ne supporte pas l'Objective-C et C + + est celui qui s'approche de lui le meilleur.

Comment faire la différence entre l'alerte deux? Précisément en utilisant la balise de propriété. Après la création du alert suffit d'entrer:

1
2
3
4
5
6
7
8
9
10
11
12
13
/ / Première alerte
[ [ UIAlertView alloc ] initWithTitle : @ "Primo" message : @ "Primo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Première" message: @ "First Alert" délégué: cancelButtonTitle auto: @ "OK" otherButtonTitles: néant, de néant];
1 ] ; // imposto il tag di questo Alert ad 1 [MISE alerte: 1] / / Définit le tag de cette Alerte à 1
; [Alerte] montrent;
; [Communiqué Alerte];

/ / ...

/ / Alert deuxième
[ [ UIAlertView alloc ] initWithTitle : @ "Secondo" message : @ "Secondo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "deuxième" message: @ "deuxième alerte« délégué: cancelButtonTitle auto: @ "OK" otherButtonTitles: néant, de néant];
2 ] ; // imposto il tag di questo Alert ad 2 [MISE Alerte: 2] / / Définit le tag de cette Alerte à 2
; [Alerte] montrent;
; [Communiqué Alerte];

Maintenant modifier l'événement afin de comprendre ce qui alerte a été fermée:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/ / Événement
/ / Cliccandi bouton OK de cette fonction sera appelée Alter
void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) clickedButtonAtIndex alertView: (NSInteger) {buttonIndex
alertView.tag ) { switch (alertView.tag) {
: cas 1:
/ / First Alert
break;
: cas 2:
/ / Selon alerte
break;
par défaut:
break;
}
}

Exact même technique peut être utilisée que si nous avons une série de <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIButton_Class/UIButton/UIButton.html">UIButton</a> run-time. Par exemple:

1
2
3
4
5
6
7
8
9
10
unsigned int i = 0 ; i < 10 ; i ++ ) { for (unsigned int i = 0; i <10; i + +) {
[ [ UIButton buttonWithType : UIButtonTypeCustom ] initWithFrame : CGRectMake ( i * 20 , i * 20 , 20 , 20 ) ] ; UIButton * myButton = [[UIButton buttonWithType: UIButtonTypeCustom] initWithFrame: CGRectMake (i * 20, * 20, 20, 20)];
@ "But" forState : UIControlStateNormal ] ; [MyButton setTitle: @ "Mais", Forst: UIControlStateNormal];
i ] ; // imposto il tag [MISE MyButton: i]; / / Définit le tag

/ / Le même événement pour tous
self action : @selector ( onTouchUpInside : ) forControlEvents : UIControlEventTouchUpInside ] ; [AddTarget MyButton: action d'auto: @ selector (onTouchUpInside:) forControlEvents: UIControlEventTouchUpInside];

mybutton ] ; [Self.view addSubview: myButton];
}

(dove eseguiamo un casting <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView">UIView</a> Dans le cas onTouchUpInside récupérer de l' sender (où nous effectuons une coulée <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView">UIView</a> la propriété <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW25">tag</a>

1
2
3
4
void ) onTouchUpInside : ( id ) sender { - (Void) onTouchUpInside: (id) sender {
( ( UIView * ) sender ) .tag; unsigned int button_tag = ((UIView *) sender) tags.;
/ / TODO
}

2 commentaires à "iPhone: les balises de propriété très utile»

  1. 12 juin 2009 Andrea Leganza :

    . Vous ne devez pas abuser de la balise propriétés (évidemment ce n'est pas le cas) quand vous êtes dans des situations où la vue est la structure beaucoup, de sorte que x sous-vue, que cette liste est maintenue avec un NSArray , c'est scanné afin de trouver ce tag .
    le subview ) Si la recherche est effectuée en comparant la valeur numérique tag séquentielle (et je ne pense pas que ce n'est pas fait d'une autre manière, l'ordre maximum en interne pour tag de la subview )

    objectatindex n'est pas vraiment bien mais j'ai mis pour la simplicité de comprendre la sémantique.

    1
    2
    3
    4
    5
    numérisation du cycle {subviews
    self.subviews.objectatindex ( i ) .tag == tagrichiesto ) { if (self.subviews.objectatindex (s). tagrichiesto == tag) {
    i ) ; retour self.subviews.objectatindex (s);
    }
    }

    1) dans le meilleur des cas l' tag la première donc nous avons fait une comparaison
    2) dans une affaire contre la médiane, nous avons n
    3) dans le pire des cas, il n'existe pas, nous avons effectué pour chaque itération x contre les inutiles

    ipotizzando il caso peggiore del non trovato: avremo effettuato 100*10=1000 confronti inutili, per non parlare di invocazioni in cascata all'array subview e ai vari metodi di analisi). Il est souvent utilisé pour accéder à des cellules du tableau, et dans cette situation, où nous avons des centaines de lignes avec x subview par ligne qui a le plus de déchets (si vous êtes 100 cellules avec chacun 10 subviews en supposant le pire cas de non trouvée: nous fait 100 * 10 = 1000 comparaisons inutiles, pour ne pas mentionner le tableau des invocations en cascade sous-vue et les différentes méthodes d'analyse).

  2. 12 juin 2009 Andrea Leganza :

    visto che confrontiamo gli indirizzi fisici dei due oggetti (più veloce di così non si può). J'ai oublié ... dans certaines situations, il pourrait être souhaitable d'utiliser un iboutlet si nous utilisons IB (Interface Builder) ou avoir un ensemble de propriétés associées à ces objets, à laquelle nous pouvons accéder directement à partir de n'importe quelle méthode de notre classe, si la comparaison est un objet ou d'une autre dans ce cas peut être fait simplement en utilisant l'opérateur == Puisque nous comparons les adresses physiques des deux objets (plus rapide si vous ne pouvez pas).
    per evitare di aggiungere variabili locali. Dans l'exemple montré est très bien, bien sûr, éventuellement faire une comparaison entre «l'ensemble» au sein de l' switch , mais j'ai vu l'utilisation de nombreux / abus de tag pour éviter d'ajouter des variables locales.

    une bonne planification

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