2011-01-03 4 views

Antwort

1

entsprechen muss ich finde die einfachste Weg, dies zu erklären, durch einen gemeinsamen Delegierten in UIKit, wie UIAlertViewDelegate wäre. Hier ist ein Beispielcode:

In Ihrer .h-Datei, würden Sie sagen, dass Ihre Klasse zu einem Delegierten entspricht, wie folgt aus:

@interface Foo : UIViewController <UIAlertViewDelegate> { // ... 

Dieser weist den Compiler, dass die Klasse Foo einige oder alle Methoden implementiert von ein Delegierter.

Wenn Sie ein UIAlertView instanziiert, geben Sie, was die Delegierten für das Objekt sind:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" 
               message:@"Message" 
               delegate:self 
             cancelButtonTitle:@"Okay" 
             otherButtonTitles:@"Cancel", nil]; 
[alert show]; 
[alert release]; 

Bitte beachten, dass wir sagen self die Delegierten sind.

Jetzt wollen Sie die notwendigen Methoden implementieren:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    NSLog(@"%d got clicked", buttonIndex); 
} 

Für UIAlertView gibt es eine Eigenschaft des Typs id<UIAlertViewDelegate>, die diese zurück zu Ihrer ursprünglichen Frage bindet.

Ich bin ziemlich neu in Objective-C/iPhone-Entwicklung und eine Sache, die ich als sehr nützlich gefunden habe, ist für eine assoziierte xxxxDelegate im Abschnitt "Überblick" einer Klasse zu suchen. Sie werden sicherlich nützliche (im Sprachgebrauch anderer Sprachen) Ereignisse finden, die für gemeinsame Aktionen ausgelöst werden.

Hoffe, das hilft!

2

Delegierte sind eine gebräuchliche Art der Kommunikation zwischen Klassen. Wenn Sie beispielsweise benachrichtigt werden möchten, wenn ein Objekt eine bestimmte Aktivität beendet hat, können Sie Ihre Klasse als Delegat für dieses Objekt registrieren. Solange Ihre Klasse die erforderlichen Delegiertenmethoden implementiert, werden diese automatisch aufgerufen.

In diesem Fall ist der "ID-Delegat" nur eine Instanzvariable, die die betreffende Klasse verwendet, um einen Verweis auf das Delegatobjekt zu speichern. (Beispiel: In unserem Beispiel möchte das Objekt informiert werden, wenn eine bestimmte Aktivität abgeschlossen ist/Ereignis aufgetreten ist.)

Wenn Sie nach unten in die Schnittstellendatei schauen, sehen Sie wahrscheinlich eine Definition von das erforderliche XXXDelegate-Protokoll - dies wird verwendet, um die optionalen und erforderlichen Methoden zu definieren, die eine Delegate-Klasse implementieren sollte.

2

Delegation sind ein einfaches und leistungsfähigen Muster, in dem ein Objekt in einem Programm im Auftrag wirkt von oder in Koordination mit, ein anderes Objekt. Das Delegierungsobjekt behält einen Verweis auf das andere Objekt - den Delegaten - und sendet die entsprechende Zeit eine Nachricht an es. Die Nachricht informiert den Delegierten eines Ereignisses, dass das Delegierungsobjekt im Begriff ist, zu behandeln, oder gerade behandelt wurde. Der Delegierte kann auf die Nachricht reagieren, indem sie die Aussehen oder Zustand von sich selbst oder anderen Objekte in der Anwendung zu aktualisieren, und in einigen Fällen kann es einen Wert zurückgeben, dass beeinflusst, wie ein bevorstehendes Ereignis behandelt ist. Der Hauptwert der Delegierung ist, dass Sie es einfach das Verhalten mehrerer Objekte in einem zentralen Objekt anpassen können.

Delegierte sollten einem entsprechen.

id<ADelegatesProtocol> delegate bedeutet, dass das Objekt delegate zum protocolADelegatesProtocol

Verwandte Themen