[Swift] MenubarItem SHEET aufrufen?

MaLud

Erdapfel
Registriert
11.07.17
Beiträge
3
Hallo,

ich bin gerade dabei mich in Swift 3 einzuarbeiten. Hierbei bin ich auf folgendes Problem gestossen:

In Objective-C habe ich folgendes Demo angelegt. Eine OS X COCOA App die ein Window und verschiedene Panels (jeweils eigener ViewController) enthält. Diese werden über Menubar Items aufgerufen. Dabei scrollt das jeweilige Panel von oben nach unten in das Window. Bis hierhin läuft alles perfekt.

Doch wenn ich nun Swift 3 verwende funktioniert der Aufruf via Menubar Item nicht!
Ich verwende jeweils ein SHEET (eigener VC) der, warum auch immer, wiederum nur von NSPOPButton aufgerufen werden kann. Dabei wird dieser wie bei der Objective-C Lösung von oben nach unten in das Window gescrollt.
Beim Versuch diesen via Menubar Item aufzurufen wird mir SHEET in der Auswahl nicht angezeigt! Wenn ich statt dessen die Option SHOW auswähle, funktioniert der Aufruf zwar, aber es wird ein neues Fenster samt dem Sheet erstellt und dies will ich auf keinen Fall.

Ich hoffe, dass ich mein Problem gut beschrieben habe und mir ein Swift Profi erklären kann warum es mit Objective-C einwandfrei funktioniert und in Swift 3 nicht.

Vielen Dank im voraus an alle die mir helfen.

Grüße Martin
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.541
Ich hoffe, dass ich mein Problem gut beschrieben habe

Leider nein, es bleibt unverständlich, was Du machst.

die ein Window und verschiedene Panels (jeweils eigener ViewController) enthält.

Ein Sheet ist ein NSPanel, das in einem modalen Dialog verwendet wird. Um es zu nutzen, muss man entweder von Hand eine NSModalSession verwalten oder Cocoa das Sheet automatisch behandeln lassen, üblicherweise indem man eine der "-beginSheet:..." Methoden verwendet.

Was Du stattdessen programmiert hast, wird aus der Beschreibung nicht klar. Wahrscheinlich passiert im Objective-C-Programm etwas aus einer Verkettung von Zufällen, was zwar ein Sheet anzeigt, aber nicht wirklich richtig ist.
 

MaLud

Erdapfel
Registriert
11.07.17
Beiträge
3
Hallo Marcel,

okay, dann versuche ich es mal so. Ich möchte eine App in Swift anlegen, die in ein bestehendes Window verschiedene NSPanel via Menüaufruf von oben nach unten einblendet. Wie gesagt in Objective-C funktioniert dies einwandfrei.
In Swift lässt sich das MenubarItem zwar mit dem NSPanel im Storyboard verbinden, es wird jedoch in einem separaten Fenster angezeigt und ich weiss nicht wie ich dies unterbinden kann bzw. so verknüpfen kann, dass das Panel ebenfalls innerhalb des Window eingeblendet wird.
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.541
Du programmierst das also nicht wirklich, sondern verwendest ein Storyboard? Das hattest Du nicht erwähnt.

Hierzu kann ich leider nichts sagen, da das eine "iOS-artige" Vorgehensweise ist, die ich selbst nie verwenden würde. Ich würde raten, dass die Kindbeziehung der beiden ViewController ohne zusätzlichen Code nicht hergestellt werden kann, aber das ist eine reine Vermutung.
 

MaLud

Erdapfel
Registriert
11.07.17
Beiträge
3
Ja, ich verwende ein Storyboard. Mir wurde dazu geraten, da es die Entwicklungszeit erheblich verkürzen soll. Wie auch immer, nun stehe ich gleich vor mehreren Problemen:
- Storyboards
- Swift 3

Mit Objective-C habe ich es mit nachfolgendem Code realisiert:

[NSApp beginSheet:buchFenster
modalForWindow:window
modalDelegate:self
didEndSelector:mad:selector
(buchGeschlossen:returnCode:contextInfo:)
contextInfo:NULL];
Mit den MenubarItems lassen sich so die NSPanels im MainWindow aufrufen bzw. einblenden.

Da ich gerade mit Swift beginne, habe ich nicht wirklich eine Vermutung wie (umschreiben in Swift 3) und vor allem wo ich diesen Code in Swift einsetzen muss. Wahrscheinlich im jeweiligen ViewController des aufzurufenden NSPanels (Sheets).