2 Stimmen

Wie aktiviere ich die verschiedenen Menüpunkte, die standardmäßig in einer Kakao-Anwendung erstellt werden?

Ich versuche, eine GUI für einen einfachen Hex-Editor zu erstellen, den ich gemacht habe. Aber ich kann keinen der Standardmenüpunkte aktivieren (z.B. "Öffnen...", "Speichern", etc.) Egal was ich tue, sie sind immer ausgegraut und nicht anklickbar.

Ich habe versucht, den Menüpunkt "Öffnen..." mit der empfangenen Aktion des First Responder-Objekts zu verknüpfen openDocument: sowie die Erstellung eines neuen Klassennamens FileMenuController.m die nur eine Methode hat -(IBAction)openDocument:(id)sender; Ich bin neu in Xcode, Interface Builder und Objective-C und bin ratlos, wie ich vorgehen soll.

Hinweis: Es handelt sich nicht um eine dokumentenbasierte Anwendung.

Vielen Dank für die Hilfe!

6voto

Caleb Punkte 121906

Sie haben die richtige Idee. Es gibt zwei Möglichkeiten, Menüpunkte zu aktivieren, wie in Aktivieren von Menüpunkten . Bei automatischer Aktivierung sucht das System in der Responderkette nach Objekten, die die Aktion für jeden Eintrag im Menü implementieren. Findet es einen Responder mit einer entsprechenden Aktion, aktiviert es diesen Menüpunkt.

Sie haben also Ihren Menüpunkt mit dem Erstansprechpartner verbunden und dieselbe Aktion in Ihrer FileMenuController Klasse. Andere Dinge, die Sie tun müssen, sind:

  • Stellen Sie sicher, dass FileMenuController erbt von NSResponder, so dass er Teil der Responderkette sein kann
  • Erstellen Sie eine Instanz von FileMenuController und vergewissern Sie sich, dass er Teil der Responderkette ist.

In Wahrheit wollen Sie wahrscheinlich kein separates Objekt, nur um das Menü Datei zu verwalten. Stattdessen würden Sie normalerweise Ihr -openDocument: Aktion in Ihrem Anwendungsdelegaten, da diese immer Teil der Antwortkette ist und weil das Öffnen eines Dokuments etwas ist, das die Anwendung tut (im Gegensatz zu, sagen wir, einem Fenster oder einer Ansicht). Andere Befehle im gleichen Menü, wie Speichern, Speichern unter, Schließen und Drucken würden nicht durch den Anwendungsdelegierten, sondern durch das Dokument, den Fenster-Controller oder das Objekt, das das Dokument/die Datei verwaltet, implementiert werden. Auf diese Weise wird der Befehl Öffnen so gut wie immer aktiviert sein (da der App-Delegierte so gut wie immer in der Antwortkette ist), aber Speichern, Schließen und Drucken werden nur aktiviert, wenn ein Dokument verfügbar ist, um diese Befehle zu verarbeiten.

Der Vollständigkeit halber sei erwähnt, dass die andere Möglichkeit, die Aktivierung von Menüelementen zu verwalten, die manuelle ist, bei der Sie den Aktivierungs-/Deaktivierungsstatus jedes Elements speziell festlegen. Ich glaube jedoch nicht, dass Sie dies für diese Aufgabe benötigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X