Alle Objekte, die gewonnen wurden aus <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> erben die nützlichen Eigenschaften <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> Diese Eigenschaft ist eine reale Benutzer-Daten (ein "Ort", die der Entwickler für allgemeine Zwecke) des Typs <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> so, wo wir speichern können nur Zahlen.
Die Anwendungen, auf die sie offensichtlich hängt von den Umständen aber kann, ist es sinnvoll, ein bestimmtes Objekt zu nehmen ein gemeinsames Auftreten zu identifizieren. Angenommen, Sie haben zwei <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIAlertView_Class/UIAlertView/UIAlertView.html">UIAlertView</a> Reaktion auf das gleiche Ereignis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | / / First Alert [ [ UIAlertView alloc ] initWithTitle : @ "Primo" message : @ "Primo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "First"-Meldung: @ "First Alert" zu delegieren: self cancelButtonTitle: @ "OK" otherButtonTitles: nil, nil]; ; [Alert show]; ; [Alert release]; / / ... / / Zweite Warnung [ [ UIAlertView alloc ] initWithTitle : @ "Secondo" message : @ "Secondo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Second"-Meldung: @ "Second Alert" zu delegieren: self cancelButtonTitle: @ "OK" otherButtonTitles: nil, nil]; ; [Alert show]; ; [Alert release]; / / Event / / OK-Taste Cliccandi dieser Funktion wird aufgerufen, Alter werden void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) {buttonIndex / / Todo } |
Hinweis: Codebeispiele in C + + finden Sie die Anfahrtsbeschreibung zu finden. Dies ist nicht ganz korrekt, denn wie Sie wissen, ist die Sprache Objective-C. Dies ist aufgrund der Tatsache, dass die Plugins, die ich verwenden, um den Quellcode einzusehen nicht unterstützt Objective-C und C + + ist der am besten nähert sich ihm.
Wie zwischen den beiden aufmerksam zu unterscheiden? Gerade mit der Eigenschaft tag. Nach der Erstellung des alert geben Sie einfach:
1 2 3 4 5 6 7 8 9 10 11 12 13 | / / First Alert [ [ UIAlertView alloc ] initWithTitle : @ "Primo" message : @ "Primo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "First"-Meldung: @ "First Alert" zu delegieren: self cancelButtonTitle: @ "OK" otherButtonTitles: nil, nil]; 1 ] ; // imposto il tag di questo Alert ad 1 [Alert EINSTELLUNG: 1] / / die tag für diese Warnung zu 1 ; [Alert show]; ; [Alert release]; / / ... / / Zweite Warnung [ [ UIAlertView alloc ] initWithTitle : @ "Secondo" message : @ "Secondo Alert" delegate : self cancelButtonTitle : @ "OK" otherButtonTitles : nil , nil ] ; UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Second"-Meldung: @ "Second Alert" zu delegieren: self cancelButtonTitle: @ "OK" otherButtonTitles: nil, nil]; 2 ] ; // imposto il tag di questo Alert ad 2 [Alert EINSTELLUNG: 2] / / die tag für diese Warnung zu 2 ; [Alert show]; ; [Alert release]; |
Nun ändern Sie die Veranstaltung, um zu verstehen, die Alarmstufe wurde geschlossen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | / / Event / / OK-Taste Cliccandi dieser Funktion wird aufgerufen, Alter werden void ) alertView : ( UIAlertView * ) alertView clickedButtonAtIndex : ( NSInteger ) buttonIndex { - (Void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) {buttonIndex alertView.tag ) { switch (alertView.tag) { : Fall 1: / / First Alert break; : Fall 2: / / Nach-Alert break; Standard: break; } } |
Exakt gleiche Technik kann verwendet werden, wenn wir eine Reihe von haben werden <a target="_blank" href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIButton_Class/UIButton/UIButton.html">UIButton</a> run-time. Zum Beispiel:
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: @ "Aber", Forst: UIControlStateNormal]; i ] ; // imposto il tag [MyButton EINSTELLUNG: i]; / / die tag / / Das gleiche Veranstaltung für alle self action : @selector ( onTouchUpInside : ) forControlEvents : UIControlEventTouchUpInside ] ; [MyButton addTarget: self Aktion: @ 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> Im Falle onTouchUpInside vom erholen sender (wo wir führen ein 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> Eigentum <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; button_tag unsigned int = ((UIView *) sender) tags.; / / Todo } |










. Sie sollten nicht zu missbrauchen die Eigenschaften Tag (offensichtlich ist dies nicht der Fall ist), wenn Sie in Situationen, in denen die Aussicht ist viel Struktur sind, so dass x Unteransicht, wie diese Liste mit einem beibehalten wird
NSArray, diese gescannt wird, um zu erfahren diesemtag.le
subview) Wenn die Suche durch den Vergleich der numerischen durchgeführt wirdtagsequentiell (und ich glaube nicht, dass es nicht auf andere Weise geschehen, die maximal um interntagdersubview)objectatindexist nicht wirklich gut aber ich habe der Einfachheit halber, um die Semantik zu verstehen.2
3
4
5
self.subviews.objectatindex ( i ) .tag == tagrichiesto ) { if (self.subviews.objectatindex (s). tagrichiesto == tag) {
i ) ; self.subviews.objectatindex return (s);
}
}
1) im besten Fall der
tagist der erste, so dass wir einen Vergleich gemacht2) in einem Fall gegen die mediane haben wir n
3) Im schlimmsten Fall ist es nicht vorhanden ist, führten wir für jede Iteration x gegen unnötige
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). Es wird oft verwendet, um Zellen der Tabelle zugreifen, und in dieser Situation, wo wir hunderte von Zeilen mit x haben
subviewpro Zeile, dass die meisten Abfälle (wenn man 100 Zellen mit je 10 sindsubviewsAnnahme der schlimmste Fall von nicht gefunden: wir aus 100 * 10 = 1000 Vergleiche sinnlos, nicht auf die Reihe von Anrufungen Kaskade Subview und die verschiedenen Methoden der Analyse ganz zu schweigen).visto che confrontiamo gli indirizzi fisici dei due oggetti (più veloce di così non si può). Ich vergaß ... in manchen Situationen kann es ratsam sein, eine Verwendung
iboutletwenn wir IB (Interface Builder) verwenden oder haben eine Reihe von Eigenschaften mit diesen Objekten verbunden sind, an die wir direkt aus einer beliebigen Methode unserer Klasse, wenn der Vergleich ein Objekt oder ein anderes in diesem Fall einfach mit dem Betreiber vorgenommen werden==Da wir die physikalischen Adressen der beiden Objekte (schneller, so dass Sie nicht können) zu vergleichen.per evitare di aggiungere variabili locali. In dem gezeigten Beispiel ist fein natürlich, schließlich einen Vergleich zwischen "Ganze" im
switch, aber ich habe viele Gebrauch / Missbrauch des Gesehenentagzu vermeiden, indem lokale Variablen.gute Planung