Eigene Veranstaltung in "Gesendete Ereignisse", die im Interface Builder-Menü für meine eigenen UIView
Habe ich eine Unterklasse von UIView und ich möchte es veröffentlichen von benutzerdefinierten Ereignissen, die im Interface Builder (eigentlich Xcode4) auf die gleiche Weise, die steuert, wie UIButton, haben eine Reihe von Veranstaltungen im "Gesendete Events" - Bereich, wenn du mit der rechten Maustaste auf ein Steuerelement in der Xcode-4-designer. Ich weiß, ich kann Delegierung verwenden (via-Protokolle) oder Benachrichtigung (über die UINotificationCenter) lassen die Objekte mit meine benutzerdefinierten Ansicht wissen, Wann bestimmte Dinge passieren, aber ich würde gerne wissen, ob das "Target-Action-Mechanismus" (beschrieben in der Cocoa Fundamentals Guide) ist angebracht/wünschenswert/möglich zu verwenden und integriert werden mit der Xcode-designer. Aus einer meist .NET hintergrund, dieser Ansatz scheint eng mit der .NET event Modell und macht am meisten Sinn für mich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es UIControlEventApplicationReserved, die bietet Ihnen eine Reihe von Ereignis-IDS, die Ihre app verwenden können. Aber ich glaube nicht, dass es irgendeinen Weg, zu sagen, Interface Builder über die Anwendung definierten Ereignisse, so dass Sie nicht erhalten die gleiche Unterstützung für Ihre Veranstaltungen in IB, wie Sie finden für UIControl standard-Ereignisse. Stattdessen müssen Sie angeben, den Ziel-und Handlungsrahmen für die einzelnen app-definierten Ereignis im code. (Bitte jemand korrigieren Sie mich wenn ich mich Irre an dieser Stelle.) Das ist überhaupt nicht schwierig, aber es ist ein wenig anders.
-addTarget:action:forControlEvents:
.Einen einfachen Weg, dies zu tun ist, um verlängern
UIControl
stattUIView
dies wird Ihnen ermöglichen, um ein Ziel hinzuzufügen, um alle Standard-Ereignisse (wieUIButton
etc).Hinweis: um für meine eigene
UIControl
um die Ereignisse zu behandeln, im Gegensatz zu den Kontrollen, die ich geschichtet oben drauf, die ich hatte, um sicherzustellen, dassuserInteractionEnabled = NO
war auf allen überlappende Steuerelemente.Können Sie dies tun, indem Sie eine IBOutletCollection. Der Vorteil dieser Methode ist, dass link-Objekte im Interface Builder. Der Nachteil ist, dass Sie können nicht direkt link zu IBActions (wie UIControl). Hier ist eine saubere Implementierung mit Protokoll:
ObserverProtocol.h
MyObject.h
MyObject.m
Dann müssen Sie nur umsetzen ObserverProtocol in Klassen, die Sie beobachten wollen-das event (und die Bindung im Interface Builder natürlich).