Sende einen Action Cocoa - IBAction

7

Ich möchte eine Aktion mit Kakao an ein anderes Objekt senden. Idealerweise würde ich auch gerne im Interface-Builder erscheinen.

Ich habe die Apple-Dokumentation ausprobiert, aber da fehlt etwas. Wenn Sie Folgendes hinzufügen, zeigt das Interface-Building nur die Aktion als eine empfangene an.

%Vor%

Könnte mir bitte jemand ein Beispiel geben, wie man eine gesendete Aktion erstellt. Danke

Ich habe die Empfangsaktion in meinem Controller1 definiert. Ich möchte dann, dass mein Controller2 in der Lage ist, eine Aktion an Controller1 zu senden (wie NSButton). Beim Erstellen einer Schnittstelle können Sie eine Zeile von NSButton auf das Steuerelement ziehen, das das Signal empfangen soll. Diese Funktionalität kann nicht nur auf Apple-Objekte beschränkt sein, sondern muss auch eine Möglichkeit sein, dies zu tun.

    
Ben Reeves 07.05.2009, 09:21
quelle

5 Antworten

1

controller1 und controller2 sind Unterklassen von NSControl.

%Vor%     
Mark 07.05.2009, 14:12
quelle
17

IBAction ist eine Präprozessordirektive, die dem Interface Builder mitteilt, "das sollten Sie wissen." Es wird tatsächlich zu void ausgewertet. Was das bedeutet ist, dass die "Aktionen" nur normale Methoden sind, die Sie auf normale Weise aufrufen können:

%Vor%

Wenn Sie das Verhalten von NSButton nachahmen möchten, können Sie eine Quelle für das Ziel und eine Eigenschaft für den Selektor (als String) hinzufügen:

%Vor%

Was könnte man dann so nennen:

%Vor%

Wenn Sie möchten, dass Ihre Klasse den Selektor per Drag-and-Drop in Interface Builder verbindet, besteht der einfachste Weg darin, Ihre Klasse zu einer Unterklasse von NSControl zu machen (ziehen Sie eine benutzerdefinierte Ansicht aus der Objektbibliothek Command-). 6 um Inspektor zu zeigen, wählen Sie Ihre Klasse im oberen Popup). Sie können die Aktion dann "aufrufen" durch:

%Vor%     
TALlama 07.05.2009 15:34
quelle
1

NSButton ist ein NSControl und hat somit eine "Aktion", die Sie verkabeln können - eine Nachricht, die gesendet wird, wenn Sie das Steuerelement auslösen (z. B. Klicken auf eine Schaltfläche). Ein Controller hat keine Aktion (was würde das bedeuten - wie würdest du die Nachricht senden?). Was du versuchst zu tun, macht also keinen Sinn.

Wenn Controller2 in der Lage sein soll, controller1 etwas zu tun, sollten Sie einen Ausgang auf controller2 (vom Typ controller1, oder eine Schnittstelle, die er implementiert) erstellen, ihn mit controller1 in IB verbinden, und dann können Sie jede Nachricht senden will von Controller2 zu Controller1 programmatisch.

    
smorgan 07.05.2009 13:12
quelle
1

Sie können dies tun, wenn Ihre Controller2 -Klasse eine Unterklasse von NSControl ist. NSControl definiert eine "gesendete Aktion", mit der Sie eine Verbindung zu Ihrem Zielobjekt herstellen, wenn Sie in Interface Builder von NSButton ziehen. Davon abgesehen gibt es einen Fehler in IB 3.0, der verhindert hat, dass die gesendete Aktion in IB angezeigt wird. Weitere Informationen hierzu finden Sie in diesem Cocoa-Entwickler-Thread .

    
e.James 07.05.2009 13:56
quelle
0

Aktionen werden immer von einem Objekt empfangen. Wenn Sie Informationen in die andere Richtung senden möchten, möchten Sie wahrscheinlich eine Steckdose: Suchen Sie nach IBOutlet.

    
Aron 07.05.2009 09:23
quelle

Tags und Links