Frage

Gibt es Probleme, wenn IBAction zu verwenden, wenn es tatsächlich nicht von einem Benutzer Aktion aufgerufen?

Wenn Sie eine Aktion wie

-(IBAction)sayHello:(id)sender;

Sie können es nennen aus Ihrer Klasse wie:

[self sayHello:@"x"]

Das @ "x" tut nichts, es füllt nur in für den Absender.

Sie können tatsächlich eine IBAction Methode ohne (id) sender

erstellen
-(IBAction)sayHello;

und es Anruf von beide Aktionen des Benutzers und aus dem Code, aber dann werden Sie keine nützlichen Sender Info von der Schnittstelle erhalten. Was ist die ‚richtige‘ Art und Weise für den Absender der Füllung, wenn sie aus dem Code aufrufen? Und können Sie erstellen Absender Informationen zu senden, wenn es aus dem Code aufgerufen wird?

Ich versuche nur, um es herauszufinden.

War es hilfreich?

Lösung

Ich denke, eine gute Praxis für OOP ist die Methode Refraktor - (IBAction) sayHello: (id) sender;

auf eine andere Methode aufgerufen: - (void) sayHello; und innerhalb des Verfahrens - (IBAction) sayHello: (id) sender {   [Self sayHello]; }

Wenn andere Methoden, um die sayHello anrufen mögen: (id) sender Aktion einige Arbeit zu tun, kann es den sayHello nennen. Der Methodenname soll Sinn machen für die Kunden es ohne ein Problem oder arbeiten rund um anzurufen. Es wird Ihnen helfen, wenn Sie zum Test oder debug

haben

Andere Tipps

Der Absender sollte eine UI-Komponente sein. Also, wenn in Ihrer Klasse, die Sie haben, sagen wir, ein UIButton ...

UIButton *button;

Dann können Sie einfach als Parameter an die Aktion an:

[self sayHello:button];

Insider das Verfahren, unabhängig davon, ob sie von der Benutzeroberfläche oder in irgendeiner Art und Weise simuliert genannt wird, können Sie einige Logik zu erkennen, wer der Absender ist, und verhalten sich anders auf dieser Grundlage. Auf diese Weise mehr Knöpfe oder andere Komponenten können das gleiche Aktion Verfahren wiederverwendet werden.

Es sei denn, Sie tatsächlich Gebrauch des sender Parameter machen (siehe Jaanus Antwort für mehr dazu), Sie sind gut mit nil für sie vorbei, wenn das Verfahren aus dem Code aufrufen.

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