2013-06-06 10 views
5

Jestem nowy w rozwoju iOS. Jestem trochę mylić, gdy dodaję przycisk programmatically.When przypisujemy cel przycisk, aby jak:addTarget: self kontra addTarget: nil

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

i

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

Jest wywołującego CallMe sposób w obu przypadkach. Czy ktoś może mi wyjaśnić, jaka jest rzeczywista różnica między tymi dwoma liniami kodu. To będzie bardziej pomocne, jeśli ktoś może wyjaśnić działanie addTarget specjalnie. Dziękuję bardzo. Pomoc zostanie przywłaszczona.

+2

@ H2CO3 źle. Dodanie celu zerowego wysyła komunikat o akcji wzdłuż łańcucha respondenta. – Sven

+0

@ H2CO3 tak, teraz to nie jest wywołanie metody, myślę, że nie budować mojego kodu po raz ostatni, głupi mistake.But możesz mi powiedzieć dlaczego mijamy „ja” do addTarget.According do mojej własnej wiedzy jak działa ten wskaźnik Proszę, nie przejmuj się, ale jestem w błędzie, czy możesz mi pomóc z tego. –

+0

@Sven Wrong, w rzeczy samej, zapomniałem o tym. Poprawiono mnie. –

Odpowiedz

6

Jeśli dodać własny lub innego obiektu jako cel komunikatu akcji zostanie przesłany do dokładnie tego obiektu.

Dodawanie nil jako cel oznacza, że ​​rzeczywisty cel zostaną przeszukane przy starcie, gdy jest wyzwalany komunikat. Wyszukiwanie rozpoczyna się od pierwszego obiektu respondenta i ciągłego stamtąd wzdłuż łańcucha respondera, czyli przez próbę obiektu zwróconego przez metodę nextResponder, aż do znalezienia obiektu implementującego tę metodę. Spójrz na numer event handling guide, aby uzyskać więcej informacji na temat dokładnej kolejności wyszukiwania.

+2

Więc, czy to jest dobry pomysł, aby ustawić go na zero, aby rodzic (osoba wywołująca) obsługiwał metodę działania jako przeciwną, aby wysłać do potomka obiekt nadrzędny? – user523234

1

Według Apple'a documentation,

obiektu docelowego jest parametrem wysłać do addTarget metody, to znaczy obiektu, do którego wysyłany jest komunikat działanie. Jeśli jest to zero, łańcuch responderów jest poszukiwany dla obiektu gotowego odpowiedzieć na komunikat o akcji.

Jeśli chcesz usunąć czynność, można przekazać nil, aby usunąć wszystkie cele w połączeniu z działaniem i określonych zdarzeń kontroli w sprawie metody docelowej usuwać

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

Oto opis parametru TARGET z dokumentacji firmy Apple dla klasy UIControl:

docelowej docelowy obiekt, to znaczy, obiekt, do którego wysyłana jest wiadomość działanie. Jeśli jest to zero, łańcuch responderów jest poszukiwany dla obiektu gotowego odpowiedzieć na komunikat o akcji.