Warum kann ich mein Menü nicht mit meinem View Controller IBAction verbinden?
Da Ihre Menüpunkte und View-Controller in verschiedenen Szenen sind im Storyboard. Sie können sich eine Szene als unabhängiges Diagramm von Objekten vorstellen, die beim Laden der Szene aus dem Storyboard instanziiert werden. Objekte in verschiedenen Szenen können im Storyboard nicht miteinander verbunden werden, da sie nicht gleichzeitig geladen werden.
Nur zum Spaß, erstellen Sie eine Instanz Ihres View-Controllers in der Anwendungsszene in Ihrem Storyboard. Um dies zu tun, müssen Sie wahrscheinlich eine einfache alte NSObject
Instanz in die Szene ziehen und dann ihren Typ festlegen. Sobald Sie das getan haben, werden Sie feststellen, dass Sie eine Verbindung von einem Menüelement zu diesem Ansichtscontroller genau so ziehen können, wie Sie es erwarten würden, aber Sie können eine Verbindung nicht auf ein anderes Objekt des gleichen Typs in einem anderen ziehen Szene.
Hinweis: Sobald Sie genügend Erfahrung gesammelt haben, um sich davon zu überzeugen, dass es funktioniert, denken Sie daran, den von Ihnen hinzugefügten View Controller zu löschen. Ein View-Controller ohne View ist wie eine Ente ohne Quacksalber, und ein View-Controller und seine View-Hierarchie sollten sich in einer eigenen Szene befinden.
Meine 2 Cent Vermutung ist, dass es mit der App sein Dokument
Nein, hat es nichts damit zu tun Basis zu tun hat. Sie hätten das gleiche Problem in einer App, die nicht dokumentenbasiert ist. Sie hätten auch das gleiche Problem, wenn Ihre App .xib-basiert wäre, anstatt Storyboards zu verwenden, da sich der Controller, mit dem Sie eine Verbindung herstellen möchten, in einer völlig anderen .xib-Datei befindet.
Die einfache Lösung, wie bereits von Mark beschrieben, ist die Responder-Kette. Die First Responder Proxy-Objekt ist Teil jeder Szene, so dass Sie immer Verbindungen zu ihm herstellen können. Wenn Sie einen Menüeintrag mit First Responder verbinden, lautet sein Ziel nil
, wodurch NSMenu
angewiesen wird, die Antwortkette zu durchlaufen, bis ein Objekt gefunden wird, das auf die Aktionsnachricht des Menüelements reagiert. Es sendet dann die Nachricht an dieses Objekt.
immer Sie Wenn Sie die Verbindung herstellen, denkt Xcode, dass Sie die Aktion verwenden möchten, um zu einem anderen Controller zu wechseln. Können Sie Ihren Menüeintrag auswählen und ihn dann durch Ziehen aus dem Verbindungseditor (rechter Bildschirmbereich) verbinden? –
@PhillipMills Ich habe das auch versucht (von Gesendete Aktionen -> Selektor) zu View Controller, aber das gleiche Ergebnis – Thomas
@Thomas Werden Ihre IBActions im HUD angezeigt, wenn Sie eine Verbindung zum First Responder der Anwendungsszene herstellen? Durch die Verbindung mit dem First Responder der Anwendungsszene konnte ich Menüelemente mit IBActions in meinen View-Controllern verbinden. –