Casting sender-parameter
Habe ich eine Methode akzeptiert einen sender und der heißt mit einem UIbutton. Wie bekomme ich dieses Objekt gegossen in eine UIImageView? Im Grunde genommen, wie kann ich re-verwenden Sie den code für die Schaltfläche.
- (IBAction)startClick:(id)sender {
button.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"Pic_1.png"],
[UIImage imageNamed:@"Pic_2.png"],
[UIImage imageNamed:@"Pic_3.png"],
nil];
[button setAnimationRepeatCount:1];
button.animationDuration = 1;
[button startAnimating];
}
- Dies ist ein Duplikat Ihrer früheren Frage: stackoverflow.com/questions/1088481/sender-tag
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine erste Reaktion ist, dass es wahrscheinlich ein Fehler, so zu tun.
UIButton
undUIImageView
sind verschiedene Unterklassen vonUIView
(undUIButton
ist eine Unterklasse vonUIControl
) also das einzige, was Sie gemeinsam haben, sindUIView
Methoden. Wennsender
ist wirklich einUIButton
, behandeln Sie es als eineUIImageView
ist wahrscheinlich zu Fehlern führen, wie "unrecognized selector geschickt Instanz" und dergleichen.Im Allgemeinen eine sauberere Lösung ist, erstellen Sie eine separate Methode, die die Aktion für eine
UIImageView
. (Im Gegensatz zu Java, Objective-C und Cocoa lieber nicht Schuhanzieher UI-response-code in eine einzelne Methode basiert auf der Ereignis-Typ — vielmehr organisieren Sie den code logisch auf der Basis der operation, die geschehen muss.)Wenn Sie müssen diese Methode aufrufen, von der Sie beide Tasten und Bild-Ansichten, können Sie trennen Sie die Logik so:
Ich scheinen zu denken, Sie hätte dies getan.
Sollte diese Arbeit. Andernfalls könnte es besser sein, um die Funktion zu ändern, um
Diese Weise Sie wollen zu werfen-Taste.
Haben Sie eine Steckdose für Ihren button? Der button ist der einzige UI-element, das senden -startClick:? Wenn ja, dann schreiben Sie die action-Methode wie diese:
Wenn Sie nicht über eine Steckdose/- Eigenschaft für die Schaltfläche, die Sie testen können, der sender ist Klasse, und gegossen wenn entsprechende.
Schließlich ist es zulässig (zur compile-Zeit) zu senden jede Nachricht eine id eingegeben Wert. (Sie erhalten eine exception zur Laufzeit, wenn der receiver reagiert nicht auf die Nachricht.) Sie können jedoch, verwenden Sie die Punktsyntax.
Also, wenn Sie wissen, dass der Absender immer eine Schaltfläche, Sie können schreiben Sie Ihre Methode ohne casting überhaupt. Sie müssen Nachrichten senden syntax anstelle von dot-syntax.
Dies ist wichtig zu verstehen - dot-syntax ist äquivalent zu Nachricht senden syntax - es ist nicht mystisch.
Können Sie einfach die folgenden Informationen, um die Beschriftung der Schaltfläche und bestimmen, welche geklickt wurde:
NSLog(@"button Geklickt: %@",[[sender titleLabel] text]);
Ich hoffe, das hilft.
Suresh