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.
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:
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:
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:
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.
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 .
Tags und Links objective-c macos cocoa