2010-12-22 7 views
2

Ich habe zwei Tasten, die die gleiche Funktion aufrufen. Das funktioniert Signatur - (IBAction)eraseTextField {...}
Ich möchte herausfinden, welche Taste die Funktion genannt. So möchte ich für die Funktionen Signatur etwas wieWelcher Knopf nannte die Funktion?

- (IBAction)eraseTextField: (id)sender {...} sein.
Gibt es eine Möglichkeit für das System zu wissen, die ID des aufrufenden Objekts an eine Funktion zu senden, die es aufruft? Danke für die Hilfe.

Antwort

3

Wenn Sie - (IBAction)eraseTextField: (id)sender verwenden, wird es mit Interface Builder so funktionieren, wie Sie denken, und der Absender wird die ID des Objekts sein, das die Methode in IB gesendet hat.

Sie können wählen, Ihre Methoden mit entweder - (IBAction)eraseTextField and - (IBAction)eraseTextField:(id)sender schreiben beide gut funktionieren und der Absender wird die ID des sendenden Objekts sein.

+2

Err, "Absender" wird nicht die 'ID' des Objekts sein, es wird das Objekt selbst sein. – psychotik

+0

Nun, das Objekt selbst ist eine ID –

+0

Ok, Justin. Vielen Dank. Ich bekomme ein "SIGABRT" und die Funktion wird nie wirklich aufgerufen - mein Haltepunkt in der ersten Zeile wird nie erreicht. Also muss ich ein anderes Problem haben. Dennoch ist es sehr hilfreich zu wissen, dass das System so funktioniert. – StoneBreaker

1

Sie können das Tag-Attribut z. // Code

myButton1.tag = 1; 
myButton1.tag = 2; 

// Builder verwenden, gehen Sie auf die Attribute Inspektor und legen Sie den Tag-Feld

dann in (IBAction) eraseTextField: (id) sender

Sie sehen können welches Tag es ist, z

switch(sender.tag) { 
    case 1: //button 1 clicked 
    break; 
    case 2: //button 2 clicked 
    break; 
    default: 
    break; 
} 

Es ist kein sehr guter Ansatz, aber es funktioniert. Zur besseren Lesbarkeit können Sie die ganze Zahl einer Konstante zuweisen. Dieser Ansatz wird möglicherweise verwendet, wenn die Schaltfläche nicht im Dateieigner verknüpft ist. Wenn es verknüpft ist, können Sie die beiden direkt vergleichen. z.B.

if (myButton1 == sender) { 
    //button 1 clicked 
} 
+0

Thnaks, Manny. Genau das versuche ich zu tun. Warum ist das kein sehr guter Ansatz? – StoneBreaker

+0

Danke, ich habe es. – StoneBreaker

+0

Die Verwendung von Tags ist kein guter Ansatz, da es schwierig sein wird, die Logik später aufrechtzuerhalten/zu erweitern. Tags sind nur numerische Werte, die uns nichts bedeuten und deren Wert sich leicht ändern kann. Ich empfehle es sparsam zu verwenden. – Manny

Verwandte Themen