Nach Angabe im Textfield verschwindet die Tastatur nicht! ???

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

  • Nach Angabe im Textfield verschwindet die Tastatur nicht! ???

    Hallo zusammen,

    ich habe ein kleines Problem und komme selber nicht darauf.
    In meiner App werden Daten abgefragt und ich muss diese in ein Textfield eingeben.
    Wenn ich das Textfield über das iPhone anklicke, kommt die Zahlentastatur hoch so wie von mir eingestellt. Dann gebe ich meine Werte ein und gehe auf meinen Bottom berechnen.
    Die Tastatur fährt aber nicht aus dem Bild heraus. Sie bleibt stehen. Welche Einstellung habe ich vergessen, so das sie automatisch nach einer Funktion verschwindet?


    Ach, noch ein kleines Problem. Wenn ich keine Werte in meine Textfield´s eingebe und trotzdem auf berechnen klicke, also die Variablen nicht mit einem Wert gefüllt sind, gibt es einen Fehler und die App bricht ab.

    Ich habe versucht die Variablen vorher schon mit einem Wert zu füllen. Aber der Fehler kommt immer wieder. Welche Abfrage muss ich machen so das ich den Fehler verhindern kann.




    ich würde mich freuen wenn ihr eine Tipp geben könntet.

    Vielen Dank und Grüße,
    Uwe
  • Zum Ausblenden der Tastatur schau mal nach der Methode resignFirstResponder vom TextField.

    Deine andere Frage lässt sich ohne Code kaum beantworten. Variablen zu initialisieren ist schon einmal eine gute Idee und sollte das Problem grundsätzlich lösen. Aber vielleicht dividierst Du auch durch Null oder ähnliches ... Wie gesagt: Ohne Deinen Code zu kennen, braucht man eine Kristallkugel.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hallo Mattes,

    die Fehlermeldung ist folgende: Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

    wird direkt hinter der Zeile: let ergebnis = (zahl1! * zahl2! * 30) angezeigt.

    Also nur wenn eben vorher kein Wert in der Abfrage eingegeben wird.

    Brainfuck-Quellcode

    1. @IBAction func ButtomBerechnen(_ sender: Any) {
    2. // Beispiel Werte bei 16 Hühnern , Futter 75 Kg pro Monat kosten 42 EUR + 3,50 EUR
    3. // Hochgerechnet bei 1000 Hühnern, Futter 4.687,5 KG pro Monat kosten 2.843,75 EUR
    4. let zahl1 = Double(wertAnzahlHuehner.text ?? "")
    5. let zahl2 = Double(wertPreisProEi.text ?? "")
    6. let zahl3 = Double(wertExtraKosten.text ?? "")
    7. let zahl4 = Double(wertFutterKosten.text ?? "")
    8. // print("Zahl1:\(zahl1!)")
    9. // print("Zahl2:\(zahl2!)")
    10. // Berechnung Umsatz pro Monat
    11. let ergebnis = (zahl1! * zahl2! * 30)
    12. let ausgabe = ergebnis
    13. // Double von einer zahl in einen String gewandelt für ausgabe in Text Lable mit self.....
    14. self.ausgabeUmsatzMonat.text = (String(ausgabe))
    15. // -----------------------------------------------------------------------------------------------
    16. // Berechnung Gewinn pro Monat
    17. let ergebnisMonat = (zahl1! * zahl2! * 30) - (zahl3!) - (zahl4!)
    18. print(ergebnisMonat)
    19. let ausgabeGW = ergebnisMonat
    20. // Double von einer zahl in einen String gewandelt für ausgabe in Text Lable mit self.....
    21. self.ausgabeGewinnMonat.text = (String(ausgabeGW))
    22. // -----------------------------------------------------------------------------------------------
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von uwe-peter ()

  • Ich bin kein „Swifty“, daher kommt von mir hier nur Halbwissen, zwei Anmerkungen:
    1. Variablen, mit denen Du rechnen willst, solltest Du mit Zahlen initialisieren.
    2. Auch wenn Swift es nicht fordert, würde ich bei der Deklaration von Variablen immer deren Datentyp angeben.
    Ich würde das Problem mit vernünftigen Initialwerten beheben, aber hier gibt es bestimmt auch eine elegante Lösung per Swift ... aber dafür müssen andere ran :D

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • uwe-peter schrieb:

    let zahl1 = Double(wertAnzahlHuehner.text ?? "")
    Wenn das Textfeld nichts enthält, was sich als Double interpretieren lässt, bekommst Du hier nil zurück- Und das ergibt dann den Crash weiter unten. Du kannst z.B. prüfen ob Du eine gültige Zahl zurückbekommen hast mit:

    Quellcode

    1. guard let zahl3 = Double(...), let zahl4 = Double(..) else {
    2. return
    3. }

    MyMattes schrieb:

    Variablen, mit denen Du rechnen willst, solltest Du mit Zahlen initialisieren.
    Macht er ja, er testet nur nicht ob die Umwandlung String -> Double erfolgreich war.


    MyMattes schrieb:

    Auch wenn Swift es nicht fordert, würde ich bei der Deklaration von Variablen immer deren Datentyp angeben.
    Nee, eigentlich nicht. Total überflüssig in Swift und vermindert erstaunlicherweise auch nicht die Lesbarkeit.
  • gandhi schrieb:

    Macht er ja, er testet nur nicht ob die Umwandlung String -> Double erfolgreich war.
    Naja, mit Initialisieren meine ich schon einen gültigen Inhalt, der nicht x Zeilen später zum Crash führt. Also in diesem Fall eine numerische Eins oder so etwas..

    gandhi schrieb:

    Nee, eigentlich nicht. Total überflüssig in Swift und vermindert erstaunlicherweise auch nicht die Lesbarkeit.
    Über das "überflüssig" kann man trefflich streiten: Ich finde es durchaus hilfreich, wenn mir bereits ein Compiler auf die Finger klopft, wenn ich einer Variablen ungültige Werte zuweise - auch wenn das hier bei einem nil kaum geholfen hätte.

    Aber ich gebe hier meinen antiquierten Programmierkenntnissen und Unkenntnis von Swift die Schuld :) Allerdings halte ich es immer noch für eine blöde Idee, wenn eine Programmiersprache dem Entwickler das Denken abnehmen will und daher viele Dinge implizit macht, was dann - meines Erachtens insbesondere bei Anfängern - immer wieder auf's Glatteis führt. YMMV...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.