Ich möchte einen "NSPanel" anzeigen, damit der Benutzer einen Namen für einen neuen Ordner eingeben kann. Warum ein NSPanel? Weil es großartig aussieht! Es enthält ein TextField und ein PushButton, um den Namen zu bestätigen. Es soll auch das Fenster schließen, wenn darauf geklickt wird.Verwenden Sie NSPanel für Benutzereingaben. Nicht wieder öffnen
Es zeigt, wenn die Schaltfläche "Hinzufügen" in meinem Menü angeklickt wird. Es schließt sich auch, wenn die Schaltfläche "Fertig" in der NSPanel
geklickt wird. Aber wenn ich wieder auf "Hinzufügen" klicke, wird es nicht mehr angezeigt. Das passiert auch, wenn ich es über den normalen "Schließen-Button" in der Titelleiste schließe. Es ist also nicht explizit auf den "fertig" -PushButton bezogen. Ich testete auch Implementierung func windowWillClose(notification: NSNotification)
, die auch in beiden Fällen nicht ausgelöst wird. Was könnte das Problem sein? Muss es auch jedes Mal ein "neues" Fenster sein? Oder verwende ich das richtig für Benutzereingaben? Ich meine, es wird nur einmal instanziiert und dann "gezeigt" und "nicht gezeigt" oder liege ich falsch?
Also habe ich eine neue Cocoa-Class - Subclass von NSWindowController
- und lassen Sie xCode auch eine .xib dafür erstellen. In dieser .xib "entwarf" ich die NSPanel
. Ich tickte visible at launch
, ohne dass das Fenster nicht angezeigt würde, wenn die Menüschaltfläche geklickt wird. Ich habe auch eine IBOutlet
für die NSPanel
in meiner Cocoa-Klasse angeschlossen. Meine Klasse im Moment wie folgt aussieht:
import Cocoa
class NamingHUD: NSWindowController, NSWindowDelegate {
@IBOutlet var insertNameWindow: NSPanel!
@IBOutlet weak var nameTextField: NSTextField!
override var windowNibName : String! {
return "NamingHUD"
}
override func windowDidLoad() {
super.windowDidLoad()
insertNameWindow.center()
insertNameWindow.makeKeyAndOrderFront(nil)
NSApp.activateIgnoringOtherApps(true)
}
@IBAction func userSetName(sender: NSButton) {
print("Close button clicked")
insertNameWindow.close()
}
}
In meiner Hauptklasse ich es als eine Variable wie folgt erklärt:
var namingHUD:NamingHUD!
und dann in override func awakeFromNib()
als:
namingHUD = NamingHUD()
als sowie in einem Click-Handler wie:
@IBAction func addClicked(sender: NSMenuItem) {
namingHUD.showWindow(nil)
}
Jetzt. Wenn ich klicke und addClicked()
ruft, erscheint das Fenster wie erwartet. Fein! Ich gebe einen Namen ein und klicke auf "Fertig" und das Fenster wird geschlossen. Auch gut! Aber wenn ich erneut klicke, um einen anderen Ordner hinzuzufügen, wird das Fenster nicht mehr angezeigt. Ich habe auch ein Preferences Window genau so erstellt. Aber mit einem Fenster statt einem NSPanel drin. Das funktioniert völlig wie es sollte.
Also habe ich klar etwas verwirrt oder etwas vergessen. Was könnte es sein? Ich gebe offen zu, dass es das erste Mal ist, dass ich mit einem Fenster außerhalb eines Tutorials arbeite. Also habe ich das ganze Konzept nicht verstanden. Ich habe in Apples Developer Guide etwas über Windows gelesen und es ergibt einen Sinn. Aber ... nun, im Moment funktioniert es nicht. Bin ich "missbrauchen" die NSPanel
? Sollte das nicht der Fall sein, da er von NSWindow
erbt oder?
Vielen Dank! Das gab mir ein wenig Einblick. Es funktioniert jetzt. – user57213