2013-06-06 13 views
5

Ich bin neu in iOS-Entwicklung. Ich bin wenig verwirren, wenn ich eine Taste am Hinzufügen programmatically.When wir ein Ziel-Taste wie zuweisen:addTarget: Selbst versus AddTarget: Null

[button addTarget:self action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside]; 

und

[button addTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside]; 

Es CallMe Verfahren in beiden Fällen ruft. Kann mir jemand erklären, was der tatsächliche Unterschied zwischen diesen beiden Codezeilen ist. Es wird hilfreicher sein, wenn jemand die Funktionsweise von addTarget speziell erklären kann. Vielen Dank. Hilfe wäre angebracht.

+2

@ H2CO3 falsch. Durch Hinzufügen eines Nullziels wird die Aktionsnachricht entlang der Responderkette gesendet. – Sven

+0

@ H2CO3 ja, jetzt ist es nicht die Methode aufrufen, ich glaube, ich habe nicht meinen Code letztes Mal, dummer Fehler.Aber können Sie mir sagen, warum wir "selbst" an addTarget übergeben. Nach meinem Wissen funktioniert selbst wie dieser Zeiger .Passe mir bitte nichts aus, aber ich bin verwirrt, hilfst du mir bitte dabei. –

+0

@Sven Falsch, tatsächlich, vergaß das. Ich stehe korrigiert. –

Antwort

6

Wenn Sie selbst oder irgendein anderes Objekt hinzufügen, das Ziel für eine Aktionsnachricht wird die Nachricht an genau dieses Objekt gesendet.

Wenn Sie nil als Ziel hinzufügen, wird das eigentliche Ziel zur Laufzeit gesucht, wenn die Nachricht ausgelöst wird. Die Suche beginnt beim ersten Responder-Objekt und wird von dort entlang der Responder-Kette fortgesetzt, dh indem das von der nextResponder-Methode zurückgegebene Objekt versucht wird, bis ein Objekt gefunden wird, das diese Methode implementiert. Werfen Sie einen Blick auf die event handling guide für weitere Informationen über die genaue Suchreihenfolge.

+2

Also, ist es eine gute Idee, es auf Null zu setzen, so dass der Parent (Aufrufer) die Aktionsmethode behandelt, um das Elternobjekt an das Kind zu senden? – user523234

1

Nach documentation von Apple ist

das Zielobjekt der Parameter auf addTarget Methoden dass senden ist, das Objekt, an dem die Aktion Nachricht gesendet wird. Wenn dies Null ist, wird die Antwortkette nach einem Objekt gesucht, das bereit ist, auf die Aktionsnachricht zu antworten.

Wenn Sie die Aktion entfernen möchten, können Sie null passieren alle Ziele mit der Aktion und den festgelegten Steuerereignisse auf dem Entfernen Zielmethode gepaart zu entfernen,

[button removeTarget:nil action:@selector(CallMe) forControlEvents:UIControlEventTouchUpInside]; 
1

ist hier Beschreibung des Parameters Ziel von Apfel in der Dokumentation UIControl Klasse:

Ziel Das Zielobjekt, das heißt, das Objekt, an dem die Aktion Nachricht gesendet wird. Wenn dies Null ist, wird die Antwortkette nach einem Objekt gesucht, das bereit ist, auf die Aktionsnachricht zu antworten.

Verwandte Themen