[Swift] Fensteranzahl limitieren

Dieses Thema im Forum "macOS-Developer" wurde erstellt von Verwirrter, 30.05.16.

Schlagworte:
  1. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Hallo zusammen,
    ich habe Mir einen Window Controller als Einstellungsfenster erstellt (in einem Storyboard versteht sich), welches mit einem Menü-Objekt verbunden ist. Leider kann ich das Menü-Objekt beispielsweise 10 Mal drücken und es öffnen sich auch 10 Fenster.

    Wie kann ich die Anzahl der Fenster limitieren, sodass man nicht die Möglichkeit hat, 10 Fenster oder mehr zu öffnen, sondern lediglich 1?

    Danke an alle :)
     
  2. CarCode

    CarCode Erdapfel

    Dabei seit:
    30.04.16
    Beiträge:
    5
    Könnten wir den Code sehen?

    Gerhard
     
  3. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Es gibt so direkt keinen Code, da ich ich das Menü-Objekt mittels der control-Taste mit dem Window Controller verbunden habe. Das ganze war bisher also lediglich eine Sache im Storyboard.
     
  4. KALLT

    KALLT deaktivierter Benutzer

    Dabei seit:
    12.11.08
    Beiträge:
    1.523
    Ich nehme an, du hast dafür eine NSStorboardSegue vom Typ ’Show’ vom Menüeintrag auf das Fenster gezogen? Standard wird dann ein neues Fenster instanziert. Du kannst im NSWindowController das Attribut ‘Presentation’ auf ‘Single’ setzen, damit immer nur ein Fenster instanziert wird.
     
  5. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Ich nutze eine Storyboard-Reference, das hätte ich vielleicht erwähnen sollen ... Jedenfalls ändert das nicht direkt die Limitierung. Wie mache ich das ganze denn am besten, wenn ich eine Storyboard-Reference habe? Oder ist es in dem Fall vielleicht sinnvoller, das Menü-Objekt zu deaktivieren?

    EDIT: Das ganze lässt sich einfach folgendermaßen lösen: Man klickt auf den Storyboard-Segue (den Strich zwischen Menü-Objekt und der Reference) und dann auf "Show the Attributes Inspector" in der rechten Leiste. Dort setzt man dann "Kind" auf "Modal".

    Ich hoffe, dies ist eine "gültige" Lösung.

    Danke und LG :)
     
    #5 Verwirrter, 01.06.16
    Zuletzt bearbeitet: 01.06.16
  6. KALLT

    KALLT deaktivierter Benutzer

    Dabei seit:
    12.11.08
    Beiträge:
    1.523
    Ich würde den Segue-Typ nicht ändern. ‘Modal’ ist dafür nicht gedacht. Du kannst das schon an der Animation erkennen, denn ein Modal-Segue springt hervor, während ein Show-Segue nur eingeblendet wird. Besser wäre es wenn du dich an Apples Vorgaben hältst und nicht zwingend versuchst um das gewünschte Ergebnis durch derartige Umwege zu erreichen. Den Segue kannst du in der Unterklasse des ersten NSWindowController mit shouldPerformSegueWithIdentifier(identifier:sender:) konfigurieren.
     
  7. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Also wie meinst Du das jetzt? Das mit der Animation ist Mir auch aufgefallen, aber soll ich den Segue zur Reference wieder auf "Show" setzen?
    So habe ich halt den Vorteil, dass das Menü-Objekt gleich mit deaktiviert wird, wenn das Fenster geöffnet wird und so die Fensteranzahl limitiert bleibt.
     
  8. KALLT

    KALLT deaktivierter Benutzer

    Dabei seit:
    12.11.08
    Beiträge:
    1.523
    Es ist aber leider kein Standardverhalten bei Einstellungsfenstern. Ich persönlich möchte bei so etwas konsequent bleiben. Natürlich kannst du das trotzdem tun, aber es gibt eben auch andere Möglichkeiten. Anscheinend funktioniert die von mir beschriebene Methode nicht mit NSStoryboardReference, aber innerhalb eines NSStoryboard funktioniert es.
     
  9. Verwirrter

    Verwirrter Tokyo Rose

    Dabei seit:
    09.02.15
    Beiträge:
    66
    Aber einen konkreten Ansatz für die Version mit Reference hast Du nicht, oder etwa doch?