Frage

Sagen Sie zum Beispiel habe ich eine IBAction , die süchtig bis zu einem ist UIButton in Interface Builder.

- (IBAction)functionToBeCalled:(id)sender
{
   // do something here   

}

Mit-in meinem Code, in einem anderen Verfahren zum Beispiel sagen, was ist der beste Weg, das nennen IBAction

Wenn ich versuche, es so zu nennen, ich erhalte eine Fehlermeldung:

[self functionToBeCalled:];

Aber, wenn ich versuche, es so zu nennen (ein bisschen zu betrügen, glaube ich), es funktioniert gut:

[self functionToBeCalled:0];

Was ist der richtige Weg, um es richtig zu machen?

War es hilfreich?

Lösung

Der richtige Weg ist entweder:

- [self functionToBeCalled:nil] 

einen Null Absender zu übergeben, was darauf hinweist, dass es nicht durch den üblichen Rahmen genannt wurde.

oder

- [self functionToBeCalled:self]

Um sich als Absender übergeben, die auch korrekt ist.

Was man wählen hängt davon ab, was genau das funktioniert, und was es erwartet, dass der Sender sein.

Andere Tipps

semantisch gesprochen, ein IBAction Aufruf sollte nur von UI Ereignisse ausgelöst werden (zum Beispiel eine Taste tippen). Wenn Sie den gleichen Code von mehreren Stellen ausgeführt werden müssen, dann können Sie diesen Code aus dem IBAction in ein eigenes Verfahren extrahieren, und rufen Sie diese Methode aus beiden Orten:

- (IBAction)onButtonTap:(id)sender {
    [self doSomething];
}

Auf diese Weise können Sie zusätzliche Logik tun, basierend auf dem Absender (vielleicht könnten Sie die gleiche Aktion mehrere Tasten zuweisen und entscheiden, was auf dem sender Parameter basiert zu tun). Und reduziert auch die Menge an Code, dass Sie in den IBAction schreiben müssen (was Ihre Controller-Implementierung sauber halten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top