Ähnlich wie this question, ich versuche, den ersten Responder auf die erste von drei NSTextField
s in einer sehr einfachen App zu setzen. Der Hinweis dort (setze den Window
's Ersthelfer im Interface Builder) scheint nicht mehr zu gelten, zumindest nicht wenn Storyboards involviert sind. Das Window
Objekt hat tatsächlich eine Steckdose, aber ich kann keine Möglichkeit finden, es per Drag, Strg-Ziehen usw. in beide Richtungen zu/von NSTextField zu setzen.InitialFirstResponder in einer Storyboard-OSX-App einstellen
Die Struktur IB hat mir zur Verfügung gestellt umfasst eine Window Controller-Szene (selbst nur ein leeres Fenster) mit einer View-Controller-Szene verbunden (die wiederum enthält meine Reihe von NSTextField
s und Etiketten).
Mein Verdacht ist, dass es eine Standardannahme/-verknüpfung gibt, die Xcode in meine App eingebaut hat, die bewirkt, dass der Fenster-Controller automatisch eine bestimmte Ansicht zur Laufzeit lädt, und deshalb ist es nicht möglich, einen ersten Responder zu binden wissen um zur Bauzeit. Das lässt mich dann fragen, welcher Lifecycle-Aufruf an welchem Objekt der richtige Zeitpunkt ist, um self.view.window.initialFirstResponder = myTextField
anzurufen, bevor es zu spät ist, und wie man am richtigsten Zugang zu diesem Objekt erhält. viewWillAppear
oder viewDidLoad
in der View-Controller fühlen sich richtig, aber keiner scheint zuverlässig zu wirken (die zunächst aktive NSTextField
variiert von Lauf zu Lauf, manchmal scheint, um Code-Änderungen zu verfolgen, aber entweder nicht).
ich den Code gepostet habe bisher auf GitHub
Yeh, deshalb frage ich mich, an welchem Punkt im App-Lebenszyklus es möglich war, den initialFirstResponder des Fensters programmatisch zu setzen - Ich bin nicht in der Lage, App, Fenster, Ansicht und Controller-Lebenszyklus in einer Storyboard-Welt. Auch das ist nicht der richtige Ruf. Aus der Dokumentation: "Verwenden Sie die Methode makeFirstResponder: NSWindow, nicht diese Methode, um ein Objekt zum ersten Responder zu machen. Rufen Sie diese Methode niemals direkt auf." BecomesFirstResponder ist eine Methode, die Views implementieren können, um den FirstResponder abzulehnen. Trotzdem funktioniert makeFirstResponder auch nicht für mich! – Chris
persönlich ich entweder auf init oder viewDidLoad aufrufen :. Auf jede Weise, vorausgesetzt, dass das Steuerelement (NSTextField etc ..) ordnungsgemäß an ein @IBOutlet gebunden ist, können Sie einfach self.whateverControl.becoemFirstRsponder() in der Stufe init() oder viewDidLoad() aufrufen.Entweder was passiert, bevor die Sicht Erbitterung tatsächlich wirksam wird. –
makeFirstResponder gibt NO für mich aus viewDidLoad – Chris