Text Field Eingabe als Namen für ein neues Objekt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Text Field Eingabe als Namen für ein neues Objekt

    Tach auch,
    ich möchte gerne Objekte einer Klasse erstellen mit der Bezeichnung der jeweiliugen Eingabe eines Textfields.
    Es soll im Grunde immer ein neues Objekt erzeugt werden wenn die Eingabe des Textfeldes sich ändert. Der Name des Objektes soll dann immer der Wert des Textfeldes sein.

    Beispiel:
    ich habe ein Eingabefeld für die Version eines Auftrags.
    Jedesmal wenn die EIngabe bestätigt wird soll ein neues Objekt mit der Bezeichnung der Version erzeugt werden.

    Hoffe das ist verständlich soweit.
  • Schau Dir mal UITextFieldDelegate an, da gibt es z. B. Möglichkeiten, beim Beenden des Editierens eines Textfeldes Code auszuführen...

    Mattes

    Edit: Ups, wir sind ja bei macOS, dort solltest Du auf die Notification NSControlTextDidChange lauschen.
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes () aus folgendem Grund: macOS-Ergänzung

  • Hi Mattes,
    Code auszuführen ist nicht das Problem. Den Wert eines Controlls in eine Variable zu übernehmen und diese dann weiter zu verwenden funktioniert ja.
    Mir gelingt es aber nicht den String eines Text Fields für den Namen eines Objektes zu verwenden.
    Ich brauche letztendlich je Version (V001, V002, V003) ein Objekt mit diesem Namen aus der Klasse Version.
  • Ach so ... also den Variablen-Namen der Objektinstanz variabel halten? Da wüsste ich auch keine Lösung. Aber warum in der Objektklasse nicht eine Eigenschaft "Name" definieren, die Du setzt? Oder die Objekte in einem Dictionary speichern und dort die Schlüssel entsprechend wählen? Irgendwie musst Du auf die Objekte ja eh wieder zugreifen...

    Etwas mehr Infos zu Deinem Datenmodell würden helfen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hi Mattes,
    ich bin jetzt den Weg über ein Dictionary gegangen.
    Jedesmal wenn der Spielername geändert wird, wird ein Dictionary ezeugt und als pList mit der Bezeichnung Spieler1, Spieler2 usw. abgespeichert.
    Das funktioniert auch soweit gut. Die pList-Dateien werden geschrieben und die Werte stehen drin.
    Jetz möchte ich das wenn das Spiel gestartet wird das die pList für den jeweiligen Spieler wieder gelesen wird und in ein Dictionary übernommen werden.
    Der Spieler macht seine Würfe und übernimmt das Ergebnis. Danach wird alles wieder in die entsprechende pList zurückgeschrieben und der nächste Spieler ist an der Reihe.
    Das ganze wird dann vielleicht mal ein Art Kniffel-Spiel

    Den Code für die Eingabe der Spieler häng ich mal ran.

    Quellcode

    1. import Cocoa
    2. class ViewController: NSViewController {
    3. var anzahl = 0
    4. var zaehler = 1
    5. var name = ""
    6. @IBOutlet weak var Anzahl: NSTextField!
    7. @IBOutlet weak var Name: NSTextField!
    8. @IBOutlet weak var Spiler: NSTextField!
    9. @IBOutlet weak var AnzahlLabel: NSTextField!
    10. @IBOutlet weak var Starten: NSButton!
    11. override func viewDidLoad() {
    12. super.viewDidLoad()
    13. Anzahl.isHighlighted = true
    14. }
    15. override var representedObject: Any? {
    16. didSet {
    17. // Update the view, if already loaded.
    18. }
    19. }
    20. @IBAction func AnzahlChange(_ sender: NSTextField) {
    21. anzahl = Anzahl.integerValue
    22. Spiler.stringValue = ("\(zaehler). Spieler")
    23. Name.isEnabled = true
    24. Anzahl.isEnabled = false
    25. }
    26. @IBAction func NameChange(_ sender: NSTextField) {
    27. name = Name.stringValue
    28. let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
    29. let path = documentDirectory.appending("/Spieler\(zaehler)")
    30. let gewinnkarte:[String: Int] = [name: zaehler, "Einer": 1,"Zweier": 2, "Dreier": 3, "Vierer": 4, "Fuenfer": 4, "Sechser": 6, "Gesamt": 20, "Bonus": 0, "Gesamtoben": 20, "Dreierpasch": 20, "Viererpasch": 24, "Fullhouse": 25, "Kleinestrasse": 30, "Grossestrasse": 40, "Kniffel": 50, "Chance": 21, "Gesamtunten": 210, "Endergebnis": 230]
    31. let plistContent = NSDictionary(dictionary: gewinnkarte)
    32. let success:Bool = plistContent.write(toFile: path, atomically: true)
    33. zaehler = zaehler + 1
    34. Spiler.stringValue = ("\(zaehler). Spieler")
    35. Name.stringValue = ""
    36. if zaehler-1 == anzahl {
    37. Name.isEnabled = false
    38. Anzahl.isEnabled = false
    39. Anzahl.isHidden = true
    40. Name.isHidden = true
    41. Spiler.isHidden = true
    42. AnzahlLabel.isHidden = true
    43. Starten.isEnabled = true
    44. Starten.isHidden = false
    45. }
    Alles anzeigen