"First Responder" - Habe ich das richtig verstanden?
Lassen Sie mich zusammenfassen, kurz: Eine "First Responder" in einer nib-Datei ist ein Objekt, das stellt das UI-element, das den Benutzer im Vordergrund. Also, wenn der Benutzer auf ein Steuerelement klickt, wird die Feder-sets, die geklickt UI-Steuerelement als First Responder. In meiner app konnte ich eine Steckdose, um das "First-Responder" aus der Feder, und so konnte ich zum Beispiel eine Nachricht senden "stellen rote Schriftfarbe" um unabhängig von der Aktivierung durch klicken auf.
Dann, wenn diese First Responder-UI-Steuerelement nicht verstehen, die Nachricht, wird die Nachricht weitergereicht wird, in der responder-Kette, bis Sie ein übergeordnetes element oder Großeltern (und so weiter) UI control element versteht die message. Sonst wird es ignoriert.
Also First Responder immer baut ein "link" zu den UI-Steuerelement, das den Fokus hat. Ist das richtig?
InformationsquelleAutor der Frage Thanks | 2009-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rechten Gesamtbild, falsche Umsetzung im Detail im ersten Absatz.
Nein, eigentlich ist First Responder ist
nil
. Anschließen eines UI-Steuerelements (z.B. ein button) auf First Responder in eine Spitze entspricht[control setTarget:nil]
im code.Den Grund für die First Responder fake-Objekt in der nib-Fenster ist, dass in der IB, die Sie festlegen, Ziel und Aktion gleichzeitig (Strg-ziehen zum Ziel, wählen Sie die Aktion aus dem pop-up-Menü). Sie können nicht von der Aktion und lassen Sie das Ziel nicht ausgeschaltet, wie Sie im code, so dass, um es zu
nil
müssen Sie dies explizit. Das ist, was First Responder ist: es ist ein fake-Objekt repräsentiertnil
so können Sie das Ziel und handeln die gleiche Weise würden Sie tun, wenn Sie die zu einem bestimmten realen Ziel.Natürlich, Sie können nicht verwenden Sie diese Option, um irgendetwas anderes zu
nil
nur Blick auf' Ziele. Sie kann es nur bedeuten, First Responder, nichts anderes.Die Feder nicht tun. Es ist nur eine gefriergetrocknete Sammlung von Objekten auf der Festplatte gespeichert. Auch wenn Sie instanziieren NSNib, was Sie tun, ist die Abtauung einige Objekte. Es ist die Objekte, die Dinge tun.
In dem Fall bei der hand, wenn Sie entpacken die Kontrolle, die Sie verbunden mit dem Ersten Responder aus der Feder, sein Ziel zu
nil
(Sie erinnern sich, das ist, was First Responder wirklich ist: ein Ziel vonnil
). Bei einer Kontrolle ist das Zielnil
und der Benutzer darauf klickt, sendet er seine Aktion zu welcher responder die first responder an der Zeit.Ihrem zweiten und Dritten Absatz richtig sind.
InformationsquelleAutor der Antwort Peter Hosey
Ihrem Verständnis ist unvollständig. Die responder chain umfasst mehr als das, was wir in der Regel würde denken, "UI-Steuerelemente, einschließlich die meisten wichtiger ist das aktuelle Dokument. Einer der großen Vorteile ist, dass es ermöglicht die Interaktion mit der konzeptionell "aktuelle" wie auch immer — Aktuelles Fenster, Aktueller text-Feld, Aktuelles Dokument, etc — ohne viel Gefummel um es zu finden.
InformationsquelleAutor der Antwort Chuck
Responder ist jedes Objekt, das ausführen von Aktionen (call-Funktionen) bei Veranstaltungen (wie z.B. das klicken auf buttons) auftreten. Die responder-Kette ist eine Sequenz von Objekten jeder sich in einer anderen - zum Beispiel ein button in einem panel in einem Fenster. Wenn ein Ereignis Auftritt, Durchlaufen wir die Kette bis wir finden ein Objekt, das nicht über ein responder-set zu
nil
können und die daher auf das Ereignis reagieren. So, statt eines responder-Objekts für jede Schaltfläche in einem Fenster, können wir Ihnen eine single-responder für das gesamte Fenster. Der first responder ist einfach das erste Objekt in der responder-chain - Verknüpfung einer Veranstaltung der first responder ermöglicht es der Fall ist, passieren die Kette.InformationsquelleAutor der Antwort Casebash
Prüfen Sie diesen link aus, es macht einen guten job zu erklären. Ich denke Sie haben das wesentliche:
http://cocoadev.com/FirstResponder
Aus der Quelle:
InformationsquelleAutor der Antwort macinjosh