TextField in SwiftUI

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

  • TextField in SwiftUI

    Hallo,

    beim 'alten' Swift bzw. vor der Einführung von SwiftUI konnte man bei den UITextField z.B. einen 'clear' - Button via Attributes Inspector einfügen. Wie es aber aussieht, ist das und etliches mehr in SwiftUI nicht mehr möglich.

    Des Weiteren konnte man z.B. das TextField mit einer eigenen Funktion wie im nachstehenden Code-Beispiel reseten bzw. löschen:

    @IBAction func resetButton(_sender: UIButton) {
    eingabeName.text = " "
    }

    Wie es aussieht, muss man wohl all diese Funktionen nun neu manuell codieren?! Oder sehe ich das falsch?

    Auch in Google fand ich keine befriedigende Antwort zu diesem Thema. Muss man das Rad wieder neu erfinden? ?(

    Danke für alle Hinweise, evtl. Links zu diesem Thema.
  • Hey,

    den Clear-Button kannst du mit einfachen Mitteln hinzufügen, siehe z.B. hier: stackoverflow.com/questions/58…-clearbutton-to-textfield


    rapier64 schrieb:

    Des Weiteren konnte man z.B. das TextField mit einer eigenen Funktion wie im nachstehenden Code-Beispiel reseten bzw. löschen:

    @IBAction func resetButton(_sender: UIButton) {
    eingabeName.text = " "
    }

    Wie es aussieht, muss man wohl all diese Funktionen nun neu manuell codieren?! Oder sehe ich das falsch?
    Was meinst du mit "neu manuell codieren?" Das kannst du doch fast 1:1 identisch in SwiftUI machen. Du musst nur konzeptionell ein wenig umdenken. Anstatt im UI den Text des Textfelds zu bearbeiten via "eingabeName.text = """ (wobei eingabeName ein schlechtes Naming für ein Textfeld ist), bearbeitest du sozusagen direkt im Model den Wert, welcher per Binding im Textfeld angezeigt wird. Und dank dem Binding updated SwiftUI automatisch für dich das Textfeld.

    Blind gecoded sieht das z.B. wie folgt aus:

    Quellcode

    1. @State private var eingabeName: String = ""
    2. var body: some View {
    3. VStack() {
    4. TextField("Eingabe Name", text: $eingabeName)
    5. Button(action: {
    6. self.eingabeName = ""
    7. }) {
    8. Text("Eingabe zurücksetzen")
    9. }
    10. }
    11. }
    Alles anzeigen

    rapier64 schrieb:

    Muss man das Rad wieder neu erfinden?
    Nein gar nicht. Man muss sich nur umgewöhnen und sich ein leicht anderes Konzept aneignen.
  • @Osxer: Vielen Dank für Deine Antwort bzw. Hilfe!

    Ich habe sowohl den Stackoverflow-Link bzw. Code-Beispiel mit dem Clear-Button als auch den anderen Code zur Löschung des TextField ausprobiert und es funktioniert nun problemlos. Einzig beim Stackoverflow Code-Beispiel reagiert der Clear-Button je nachdem nur nach mehrmaligen klicken (mit der Maus, da Simulator!?). Denke aber, dass dies evtl. mit dem Simulator zu tun hat. Ansonsten läuft nun alles. ;)