Berechnen bei/nach eingabe

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

  • Berechnen bei/nach eingabe

    Hallo liebe Swift Profis,

    was mache ich bitte falsch bzw was ist falsch das mir meine app die berechnung nicht nach der eingabe in die textfelder macht?


    Quellcode

    1. func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    2. myLabel.text = pickerDataSource[row]
    3. if(row == 0)
    4. {
    5. // Traufehö-Vordach-Neigung
    6. grdmaß.enabled = true
    7. grdmaß.backgroundColor = UIColor.whiteColor();
    8. frsthö.enabled = true
    9. frsthö.backgroundColor = UIColor.whiteColor();
    10. trfhö.enabled = true
    11. trfhö.backgroundColor = UIColor.whiteColor();
    12. vrdalä.enabled = true
    13. vrdalä.backgroundColor = UIColor.whiteColor();
    14. dchng.enabled = true
    15. dchng.backgroundColor = UIColor.whiteColor();
    16. okfpf.enabled = false
    17. okfpf.backgroundColor = UIColor.groupTableViewBackgroundColor();
    18. okfipf.enabled = false
    19. okfipf.backgroundColor = UIColor.groupTableViewBackgroundColor();
    20. func txtEditingChanged(sender: UITextField) {
    21. if grdmaß.editing && frsthö.editing {
    22. if grdmaß.text!.isEmpty && frsthö.text!.isEmpty {
    23. grdmaß.text = "0"
    24. frsthö.text = "0"
    25. }
    26. let txt1 = str2float(grdmaß.text!)
    27. let txt2 = str2float(frsthö.text!)
    28. let a = txt1 * txt2
    29. okfpf.text = "\(a)"
    30. }
    31. }
    32. }
    Alles anzeigen
    die debug console gibt mir das hier aus:
    2016-01-03 22:35:41.029 Zimmerei und Holzbau[5917:4003335] Can't find keyplane that supports type 8 for keyboard iPhone-Portrait-DecimalPad; using 4131139949_Portrait_iPhone-Simple-Pad_Default

    LG matze
  • Die Warnung hat damit nix zu tun. Sie sagt Dir nur, dass Deine bevorzugte Tastatur nicht genutzt werden kann und (ein Überbleibsel aus Objective-C, als man noch nicht jede Kleinigkeit mit einer Exception oder einem Compilefehler quittiert hat) fällt auf eine als Standard definierte Tastatur zurück.
    Sie ist lediglich so freundlich Dich darauf hinzuweisen.

    Zum eigentlichen Problem:
    Wie ist Dein PickerView konfiguriert?
    Wenn automatisch Zeile 0 ausgewählt ist, muss die Delegate Methode nicht feuern, wenn Du selbst noch mal auf die erste Zeile (Zeile 0) tippst.

    Wird Deine txtEditingChanged Methode eigentlich überhaupt aufgerufen?
    Und wenn ja von wem?
    Wieso hängt die eigentlich als inline-Funktion im if-Zweig?

    Das scheint mir kein Swift Problem, sondern ein Design Problem.
    Welche einführende Literatur nutzt Du?

    One more thing:
    Unicode in deutschen Variablennamen nutzen aber abkürzen ist echt mal seltsam.
    grdmaß statt gradmaß statt degreeMeasure?
    frsthö statt firsthöhe statt ridgeHeight?
    traufehö statt traufhöhe statt eavesHeight?
    Vordachlänge und Dachneigung haben sicherlich auch international nutzbare Äquivalente.
    Was sollen eigentlich okfpf und okfipf sein? Und was noch viel wichtiger ist: Weißt Du das in einem halben Jahr immer noch?
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • ich nutze das buch swift2 von rheinwerk

    wegen den abkürzungen.... ich bin zimmerer und das sind alles längen bzw maße im dachstuhlprofil. habe sie alle in den @IBOutlet weak var so abgekürzt damit ich nicht immer alles ausschreiben muß. okfpf = oberkante fußpfette ;)

    wie entnehm ich den welcher row aktiv ist um die dementsprechende berechnung zu machen?

    lg matze

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von matze511 ()

  • Also dass es was mit Zimmerei/Holzbau im Allgemeinen und Dächern im Besonderen zu tun hat dachte ich mir fast.
    Da waren so Schlüsselworte wie // Traufehö-Vordach-Neigung oder 2016-01-03 22:35:41.029 Zimmerei und Holzbau[5917:4003335] versteckt. ;)

    Zurück zum Thema.
    Müsste dann Kapitel 16.4 und 16.5 nicht genau das sein, was Dir in dem Fall weiterhelfen kann?
    (Wobei der Herr Kofler für seinen 'CurCalc' Objektnamen gesteinigt, geteert und gefedert gehört. Lesen Sie das, Herr Kofler? Gesteinigt, Geteert und Gefedert! Und auf dem Rathausmarkt vorgeführt. 'CurrencyCalculator', bitteschön. Eventuell auch 'CurrencyConverter', je nachdem, was das Ding tatsächlich tut.)

    Du könntest es swift machen und in Deine func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { eine Ausgabe von row und component machen. Vor Deiner Abfrage.
    Dann selektierst Du fröhlich im Pickerview umher und siehst in der Konsole von Xcode sofort, wann die Methode greift und was Du ausgewählt hast.

    Du könntest es auch richtig machen und in der ersten Zeile nach func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { einen Breakpoint setzen. Vor Deiner Abfrage.
    Dann selektierst Du fröhlich im Pickerview umher und siehst sofort, wann die Methode greift und erkennst in der Instanzvariablenansicht von Xcode, was Du ausgewählt hast.

    Bekommt myLabel überhaupt den richtigen Wert, nachdem Du im PickerView frühlich herumselektiert hast?
    Falls nicht kannst Du Dir den ersten Start nach Einpflegen des swiften oder richtigen Weges sparen und musst erst mal das Delegate mit dem PickerView richtig verdrahten.
    (Also an geeigneter Stelle pickerview.delegate = self, so wie es hoffentlich auch im Buche steht.)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • @Marco Feltmann erstmal danke für deine hilfe!!!

    zum einen post weiter oben, ist es zwingend notwendig die abkürzungen in ausgeschriebenen englisch zu machen? weil wenn ja würde ich es auch ändern wenn es dann der übersichtlichkeit nützt.

    zur lektüre, hast du da vlt noch ein besseren tip als ebook vlt und bitte in deutsch! die developerseiten von apple sind schon hui für mich :D

    und das mit den breakpoint und so muß ich erstmal etwas selbststudium machen ;)

    also wenn ich jetzt mit dem code fröhlich im pickerview herrumselektiere werden die textfelder nach dem auch dementsprechend grau und nicht beschreibbar also ich kann sie nicht antippen. kann es sein das sie durch das inaktiv auch keine werte ausgeben?
  • Nein, das ist überhaupt nicht notwendig, schon gar nicht zwingend.
    Es erleichtert Dir lediglich die zukünftige Arbeit (man liest häufiger alten Code als das man neuen Code schreibt. Viel häufiger) und uns eventuelle Hilfestellungen.
    Was mit ö geht, geht übrigens auch mit Smilies, vereinfachtem Chinesisch oder Kyrillisch. Wenn Dir ein indischer Dienstleister Code erstellt, bei dem die Variablen in Devanagari notiert sind, dann finde Dich da erst mal zurecht. ;)

    Die Lektüre sieht zumindest vom Inhaltsverzeichnis und der Leseproben her gut aus.

    Wenn die Felder inaktiv werden, dann läuft Deine Delegate Methode korrekt und es wird (wie angenommen) nicht in die inline Funktion txtEditingChanged(sender: UITextField) { gesprungen.
    Oder die Abfrage ist nicht erfüllbar.

    if grdmaß.editing && frsthö.editing { besagt ja, dass beide Textfelder gleichzeitig im Editiermodus sein müssen - das stelle ich mir doch etwas schwer umsetzbar vor. ;)

    Ich denke, Deine Delegatemethode für die Textfelder ist da einfach völlig fehl am Platz.
    Setz das als Funktion außerhalb dieser Pickerview Delegate Methode, achte darauf, dass die Textfelder im Interface Builder ihr entsprechendes Event mit dieser Funktion verbunden haben und üb ein bisschen mit den Breakpoints.

    Dann findest Du bestimmt heraus, ob Deine If-Bedingung greift und wie Du weiter vorgehen kannst. :)
    Dass in dem Buch von Versionsverwaltung mit Git geschrieben wird ist löblich, dass Debugging in Xcode außen vor gelassen wird hingegen unverständlich.
    Funktioniert Debugging von Swift denn nicht? 8|

    Am Besten besorgst Du Dir schnell das Apps programmieren für iPhone und iPad.
    Das kümmert sich nicht so sehr um Swift (also viel Objective-C drin, aber auch ein kleiner Swift Teil) sondern vielmehr um das 'wie' bei der Entwicklung.
    Ganz akut rate ich Dir zu Kapitel 3.6 der alten, Objective-C only Fassung, da es die als kostenloses Openbook gibt:
    openbook.rheinwerk-verlag.de/a…d0-4f94-a46f-35d68214ab45

    Das wird Dir sicherlich bei Deinem Selbststudium helfen.
    (Der Clemens Wagner springt hier auch rum, da isses einfacher mit dem Steinigen, Teeren und Federn, wenn da Mist drin stünde - was es nicht tut.)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Hallo @Marco Feltmann ich glaub ich hab mein problem ein wenig eingegrenzt. hab da mal das ganze von hinten aufgezäumt, wenn ich zum beispiel jetzt als rechnung

    Quellcode

    1. let a = 2 * 2
    2. okfpf.text = "\(a)"
    3. print(okfpf.text)
    in den codeabschnitt mit eingebe gibt mir mein handy auch die 4 an der richtigen stelle aus, sowie ich aber ein textfeld mit in verbindung bringe kommt nichts mehr.
    kann es sein das die action methode fehlt und er nicht weiß was er mit der rechnung anfangen soll, sprich ein button "berechne" fehlt? weil der herr köfler in meiner lecktüre hat das ganze mit einer @IBAction func realisiert, die mir aber xcode immer als fehler anzeigt und das @IBAction entfernen will und daher nicht mehr angesprochen wird.

    lg matze

    P:S: kann man die rechen funktione irgendwo seperat ablegen und ein verweiß dorthin einbauen......hoffe hab mich verständlich ausgedrückt :D
  • Ja, es dürfte daran liegen, dass einige Outlets oder Actions nicht verbunden wurden. Da solltest Du dringend herausfinden, warum er die Annotations nicht anerkennt. Scheint mir die Wurzel des Übels zu sein.

    Und natürlich kannst Du die Rechenfunktion auslagern. Du kannst das zu Tode wegoptimieren.
    Solltest Du aber erst mal sein lassen. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • weiter eingrenzen kann ich noch das man innerhalb der "func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)" keinen button mit @IBAction verbinden kann!
    wie kann man denn aus dem "if(row == 0)" eine Variable machen und mit der "@IBAction func rechne(sender: UIButton)" so verbinden das wenn row 0 aktiv ist rechnung a gemacht wird und wenn row1 aktiv ist rechnung 2 usw? oder kan ich innerhalb der "if(row == 0)" die func für das rechnen schreiben und nur dem butten sagen jetzt diese rechnung machen?
  • matze511 schrieb:

    weiter eingrenzen kann ich noch das man innerhalb der "func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)" keinen button mit @IBAction verbinden kann!

    du weißt aber was du mit einer IBAction tust ? ... das wäre auch schlimm, wenn es funktionieren würde.

    Stichwort @IBAction func


    matze511 schrieb:

    wie kann man denn aus dem "if(row == 0)" eine Variable machen und mit der "@IBAction func rechne(sender: UIButton)" so verbinden das wenn row 0 aktiv ist rechnung a gemacht wird und wenn row1 aktiv ist rechnung 2 usw? oder kan ich innerhalb der "if(row == 0)" die func für das rechnen schreiben und nur dem butten sagen jetzt diese rechnung machen?
    warte auf das Buch oder wühl dich durch das Internet.

    Das ist wirkliches Grundlagen erklären.
  • @matz auf das buch warten? oh gedult ist eine tugend :D :D :D



    matz schrieb:

    du weißt aber was du mit einer IBAction tust ? ... das wäre auch schlimm, wenn es funktionieren würde.

    Stichwort @IBAction func
    denke mal nachdem ich es festgestellt hab ja. deshalb kam ich zu dem entschluß die func rechne ( die jeweilige Berechnung) in der didSelectRow mit einzufügen und dann über den button anzufeuern (hoffe hab mich richtig ausgedrückt) da ja dann immer nur die entsprechende rechnung aktiv ist.
    ich hoffe meine vorgehensweise hab ich nun selber richtig erkannt?

    lg matze
  • matze511 schrieb:

    oh gedult ist eine tugend
    scheint wohl am Namen zu liegen, kenne ich ;)


    matze511 schrieb:

    denke mal nachdem ich es festgestellt hab ja. deshalb kam ich zu dem entschluß die func rechne ( die jeweilige Berechnung) in der didSelectRow mit einzufügen und dann über den button anzufeuern (hoffe hab mich richtig ausgedrückt) da ja dann immer nur die entsprechende rechnung aktiv ist.
    ich hoffe meine vorgehensweise hab ich nun selber richtig erkannt?
    nope.

    warum möchtest du eine Funktion in einer Funktion implementieren?