2016-12-24 5 views
2

In einem meiner Ansichten rief ich ein modaler Dialog wie das:Wie Regain/Set Focus in einer Mac OS Swift Anwendung

let application = NSApplication.shared() 
    application.runModal(for: artistDialogWindow) 

Wenn die OK oder Abbrechen-Taste gedrückt werden, ich das modale Fenster enden wie this:

Die Ansicht, die den Dialog aufgerufen hat, übernimmt die Kontrolle. Nachdem es Code ausgeführt hat, wird es beendet. Auf dem Bildschirm scheint kein Fenster den Fokus zu haben. Wenn ich auf die Titelleiste meines Fensters klicke, werden die roten, orangefarbenen und grünen Tasten links von der Titelleiste von grau zu farbig. Wie kann ich das programmatisch machen?

Ich habe NSApplication.activate versucht. Es tut nichts. Vermutlich ist meine App schon aktiv. Es hat einfach keinen Fokus. Ich habe auch versucht, eine Zeile in einer Tabelle in der Ansicht auszuwählen. Die Zeile ist ausgewählt, das Fenster jedoch nicht.

+1

NSWindow Dokumentation Ihnen Methoden wie orderFront gibt: zum Beispiel ... jetzt Sie nur einen Verweis auf das Fenster müssen, die Front gehen. Oder Sie führen den Dialog modal zum aktuellen Fenster ... als es überhaupt nicht notwendig sein sollte. – Volker

Antwort

0

Sie könnten NSWindows makeKey() versuchen. Oder makeKeyAndOrderFront (_ sender: Any?). Diese aktivieren das Fenster.

Zum Beispiel muss ein niceWindow fokussiert werden (Sie benötigen einen Verweis auf das Fenster, auf das Sie den Fokus richten möchten). Dann tun:

niceWindow.makeKey() 

oder

niceWindow.makeKeyAndOrderFront(self) 
+0

Ich habe es mit self.view.window! .makeKey() arbeiten lassen. Ändern Sie Ihre Frage in eine Antwort, damit andere davon profitieren können und ich akzeptiere sie. – curt

+0

Fertig. Froh, Hilfe zu geben! –

+0

Kann der Arbeitscode gepostet werden? Ich habe genau das gleiche Problem, kann es aber nicht funktionieren lassen. http://stackoverflow.com/questions/41581740/how-to-bring-focus-to-window-after-closing-modal-in-swift-3-for-macos – Travis