Daten aus einem PickerView in ein Label in einen anderen Viewport übergeben

  • Daten aus einem PickerView in ein Label in einen anderen Viewport übergeben

    Hallo miteinander,

    ich mal wieder :)

    Da ich Swift ja gerade erst lerne muss ich Euch mal wieder nerven.

    Mein Problem heute:
    Ich habe zwei ViewController.
    Der erste hat einen Button mit dem man per Segue in den zweiten wechselt, das funktioniert auch wunderbar.

    Im zweiten ViewController befindet sich ein PIckerView in dem man Daten auswäheln kann, welche in einem Label ausgegeben werden. Auch das funktioniert im Lebel der zweiten Views.
    Soweit also kein Problem

    Nun möchte ich aber die Daten zurück an den ersten View in einem Label ausgeben.
    Gleichzeitig würde ich gerne den ausgegebenen "INT" Wert (z.B. f/1.4) in ein "Double" umwandeln um den Wert weiter verrechnen zu können.

    Hier mal der Code wie ich ihn bisher geschrieben habe:

    Quellcode View1:

    Quellcode

    1. class View1: UIViewController {
    2. @IBOutlet weak var DataFromView2: UILabel!
    3. override func viewDidLoad() {
    4. super.viewDidLoad()
    5. }
    6. override func didReceiveMemoryWarning() {
    7. super.didReceiveMemoryWarning()
    8. }
    9. @IBAction func unwindToView1(_ segue: UIStoryboardSegue)
    10. {
    11. }
    12. }
    Alles anzeigen

    Quellcode View2:

    Quellcode

    1. class View2: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
    2. @IBOutlet weak var DataPicker: UIPickerView!
    3. @IBOutlet weak var DataLabel: UILabel!
    4. // PickerView
    5. let DataOutput = ["a/1.0", "a/1.5", "a/1.8", "a/2.0" ]
    6. func numberOfComponents(in pickerView: UIPickerView) -> Int
    7. {
    8. return 1
    9. }
    10. func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    11. {
    12. return DataOutput[row]
    13. }
    14. func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
    15. {
    16. return DataOutput.count
    17. }
    18. func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    19. {
    20. DataLabel?.text = DataOutput[row]
    21. }
    22. }
    Alles anzeigen
    Sind die Daten in den View1 übergeben, würde ich diesen "INT" Wert auch gerne aus Double/Float ändern um sie weiter verrechnen zu können.
    Im Label selbst soll aber weiter z.B. "a/1" stehen bleiben.

    Ich hoffe ihr verzeiht mir meine absoluten Anfängerfragen, aber ich komme da gerade überhaupt nicht weiter.
    Vielen Dank! :)
  • Wenn der Begriff MVC (Model View Controller) nicht nur ein Schulterzucken bei Dir auslöst, dann wärst Du der Lösung schon ein wenig weiter. ;)

    Übergib dem ViewController mit dem PickerView einfach Dein Model Objekt, so dass dieser Änderungen am Model direkt im Model Objekt speichern kann.

    Wenn Du mit Segues arbeitest, dann solltest Du das Model Objekt in prepare(for:sender:) an den ViewController mit dem PickerView übergeben können.
  • Ich habe das ganze jetzt mal mit prepare (for segue) versucht. Den Code für eine einzelne Texteingabe in einen anderen View kenne ich und es funktioniert auch.

    Nur mit der Übergabe des PickerViews hackt es noch irgendwo....

    Hier nochmal die neuen Codes:

    View 1:


    Quellcode

    1. class View1: UIViewController {
    2. @IBOutlet weak var FromView1: UILabel!
    3. override func viewDidLoad() {
    4. super.viewDidLoad()
    5. }
    6. override func didReceiveMemoryWarning() {
    7. super.didReceiveMemoryWarning()
    8. }
    9. @IBAction func unwindToView1(_ segue: UIStoryboardSegue)
    10. {
    11. }
    12. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    13. if segue.identifier == "FromView1" {
    14. let View2 = segue.destination as! View2
    15. View2.DataOutput.text = FromView1?.text ?? ""
    16. }
    17. }
    18. }
    Alles anzeigen

    Und View 2:


    Quellcode

    1. class View2: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
    2. @IBOutlet weak var DataPicker: UIPickerView!
    3. @IBOutlet weak var DataLabel: UILabel?
    4. var DataOutput = ["a/1.0", "a/1.5", "a/1.8", "a/2.0" ]
    5. func numberOfComponents(in pickerView: UIPickerView) -> Int
    6. {
    7. return 1
    8. }
    9. func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    10. {
    11. return DataOutput[row]
    12. }
    13. func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
    14. {
    15. return DataOutput.count
    16. }
    17. func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    18. {
    19. DataLabel?.text = DataOutput[row]
    20. }
    21. override func viewDidLoad() {
    22. super.viewDidLoad()
    23. DataLabel?.text = DataOutput.text
    24. }
    25. override func didReceiveMemoryWarning() {
    26. super.didReceiveMemoryWarning()
    27. }
    28. }
    Alles anzeigen
    Wo ist da der Wurm drinnen ?
    Bin echt gerade am Verzweifeln...

    Einen Fehler bekomme ich nur im View1 angezeigt.... (Value of type´[String]´has no Member ´text´)...
  • MCDan schrieb:

    In View2 benötigst Du ein Property für Dein Daten Model. Dieses setzt Du im prepare(for:sender:).

    Im View2 kannst Du dann Änderungen am PickerView direkt im Daten Model speichern.
    Das bedeutet genau Ausgedrückt was?
    Was ist ein Property ?
    WIe gesagt, ich bin gerade am lernen und kenne viele Ausdrücke nicht.
    Ich verstehe nicht warum im View2 was falsch sein soll obwohl mir im View1 ein Fehler angezeigt wird....

    In dem TestFile das ich geschrieben habe ohne PickerView hat ja auch alles Tadellos funktioniert mit der Übergabe.
    Mir ist nur nicht klar, wie ich die Daten des PickerViews übernehmen und weitersenden kann....
    Im letzten Testfile hatte ich nur in View 1 einen Butten und ein Textfeld, welches an den View2 übergeben wurde....

    Könntest Du vielleicht so nett sein und meinen Code so ausbessern damit ich das auch verstehe , wäre echt Klasse von Dir ! :)

    Michael schrieb:

    Deine Namenswahl ist schlecht. Du nennst Deine Klassen View1 und View2, dabei sind beides keine Views, sondern Controller.
    Ja, ich weiß, es ist ja nur ein Übungsfile um die Zusammenhänge zu verstehen, da ist mir die Benennung zur Zeit noch egal solange es funktioniert....also halbwegs zumindest. ;)
  • Hmm, Schade, dass es auch hier nicht möglich ist, einfach einfache Antwort auf eine Frage zu bekommen.
    WIe in vielen anderen Foren auch.

    Ich gebe VectorWorks(Spotlight) Schulungen, Fotografie Kurse, Kurse zur Beleuchtung usw.... wenn ich mal wer was fragt, gebe ich auch eine Antwort und verweise nicht auf andere Seiten oder verweise auf ein Grundlagenstudium...

    Aber so ist das nun mal in Foren leider.... ;)

    Werde mich anders schlau machen, bleibt wohl nichts über...viel Spaß für Euch hier noch! :)
  • Damit hier kein falscher Eindruck entsteht: In diesem Forum (wie wahrscheinlich auch in den anderen von Dir zitierten) helfen Benutzer gerne anderen bei Fragen und Problemen. Was ein Forum aber nicht leisten kann, ist eine Grundlagenschulung.

    Programmieren ist eine hochkomplexe Tätigkeit, und nein, das sage ich nicht zur Abschreckung oder aus Eigenlob: Es erfordert ein analytisches, strukturiertes Denken, Problemlösungs-Kompetenz, Kenntnis von Programmiersprachen / -konzepten, Entwicklungsumgebungen, Wissen über Frameworks und die Zielplattform und vieles mehr.

    Um diese zu erwerben, ist neben viel Zeit und Übung ein stabiles Grundlagenwissen und der Willen zum Selbststudium unerlässlich.

    Deine Frage nach „Properties“ - ein grundlegender Begriff aus der Objekt-orientierten Programmierung - wurde mit einem Literaturverweis beantwortet. Was willst Du mehr? Und die Bitte nach Überarbeiten Deines Codes empfinde ich (1.) als dreist und (2.) als überhaupt nicht zielführend.

    Frage ruhig Fragen ... aber erwarte keine Komplettlösungen und unterschätze nicht, wie anspruchsvoll die Erstellung einer „kleinen“ App ist - auch wenn uns Apple etwas anderes suggerieren möchte.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • WolfgangN schrieb:

    Hmm, Schade, dass es auch hier nicht möglich ist, einfach einfache Antwort auf eine Frage zu bekommen.

    Ich hätte Dir auch gerne einen geänderten Source Code zur Verfügung gestellt. Leider kann ich kein Swift und daher wäre die Lösung evtl. nicht lauffähig.

    Ich habe die Antwort so formuliert, dass man damit die Lösung in Objective-C und Swift umsetzen sollen könnte.

    Wenn Du dann allerdings nachfragst, was ein Property ist, dann ist es natürlich schwer, Dir eine Lösung zu geben, die nicht aus fertigem Swift Source Code besteht. Da müsste dann jemand mit Swift Kenntnissen behilflich sein.

    Die Bezeichnungen Property und Daten Model würde ich eindeutig als Sprach bzw. Programmier Basics bezeichnen und daher vermute ich, dass es da bei Dir leider noch hapert. Klar möchte man schnell Ergebnisse sehen, wenn man mit dem Programmieren beginnt. Um die Basics kommt man aber nun mal nicht drumherum, da man sich sonst nicht mit anderen Entwicklern austauschen kann.

    Wenn es Dir wirklich weiter hilft, dann kann ich Dir eine Lösung in Objective-C anbieten, die Du dann nach Swift umsetzen müsstest.

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

  • MyMattes schrieb:

    Damit hier kein falscher Eindruck entsteht: In diesem Forum (wie wahrscheinlich auch in den anderen von Dir zitierten) helfen Benutzer gerne anderen bei Fragen und Problemen. Was ein Forum aber nicht leisten kann, ist eine Grundlagenschulung.




    Mattes
    Da ist schon völlig klar, ich habe mir ein Buch besorgt über Swift 4, 1300 Seiten sind halt ein wenig viel Stoff auf einmal.
    Bein Thema Properties bin ich zur Zeit noch nicht angelangt, bin auf Seite 230 nach knapp 4 Tagen und verstanden habe ich immer noch nicht alles, aber einiges halt doch.
    Es ist ja nicht so, dass ich hier fertige Codes haben will, das würde mir nichts bringen ausser sie abzutippen, ich will es ja selbst lernen!
    Aber Fragen was an meinem Code falsch ist, halt ich nicht für Frech, wer nicht fragt, wird nichts dazulernen.



    MCDan schrieb:

    WolfgangN schrieb:

    Hmm, Schade, dass es auch hier nicht möglich ist, einfach einfache Antwort auf eine Frage zu bekommen.
    Ich hätte Dir auch gerne einen geänderten Source Code zur Verfügung gestellt. Leider kann ich kein Swift und daher wäre die Lösung evtl. nicht lauffähig.

    Ich habe die Antwort so formuliert, dass man damit die Lösung in Objective-C und Swift umsetzen sollen könnte.

    Wenn Du dann allerdings nachfragst, was ein Property ist, dann ist es natürlich schwer, Dir eine Lösung zu geben, die nicht aus fertigem Swift Source Code besteht. Da müsste dann jemand mit Swift Kenntnissen behilflich sein.

    Die Bezeichnungen Property und Daten Model würde ich eindeutig als Sprach bzw. Programmier Basics bezeichnen und daher vermute ich, dass es da bei Dir leider noch hapert. Klar möchte man schnell Ergebnisse sehen, wenn man mit dem Programmieren beginnt. Um die Basis kommt man aber nun mal nicht drumherum, da man sich sonst nicht mit anderen Entwicklern austauschen kann.

    Wenn es Dir wirklich weiter hilft, dann kann ich Dir eine Lösung in Objective-C anbieten, die Du dann nach Swift umsetzen müsstest.
    Das ist sehr lieb von Dir, würde mich aber wirklich nicht weiterbringen, da ich es ja auch verstehen will.
    Fertige Codes helfen mir da nicht weiter, das wäre reines abtippen ohne den Inhalt zu verstehen.
    Danke auch für den Link, aber ich bin nicht der beste in der Englischen Sprache, dieses Fach gab es zu meiner Zeit in der Schule nur sehr peripher...( ich bin fast 70!)

    Warum ich auf manche Antworten ein wenig "pampig" reagiere, weil Antworten wie "Dann tu uns und dir einen Gefallen und zieh dir erst mal die wichtigsten Grundlagen rein.t" einfach unnötig sind.
    Da ist es besser angebracht einfach gar nichts zu schreiben, oder es so zu formulieren sodass es höflich ankommt beim Fragesteller.
    Aber vielleicht ist das ja auch so in der heutigen Zeit und ich komme da nicht mehr so ganz mit...


    Ich werde einfach weiterlesen und mich in Swift bilden und dann schaue ich mal was dabei rauskommt.
  • WolfgangN schrieb:

    sodass es höflich ankommt beim Fragesteller
    Sollte es unhöflich angekommen sein, so tut es mir leid, das war nicht meine Absicht.

    WolfgangN schrieb:

    Aber vielleicht ist das ja auch so in der heutigen Zeit und ich komme da nicht mehr so ganz mit...
    Nein, aber Menschen sind eben unterschiedlich ;)


    WolfgangN schrieb:

    Könntest Du vielleicht so nett sein und meinen Code so ausbessern damit ich das auch verstehe , wäre echt Klasse von Dir !
    Das stieß Mattes auf.

    Bei konkreten Fragen sind wir auch ganz lieb ;)
  • Neu

    Das ist eigentlich ganz einfach per "delegate"....

    Schreibe einfach unter "Import UIKit" folgenden Code z.B.:

    Quellcode

    1. protocol sendData {
    2. func sendDataBack{data: String)


    Achtung!, dass ganze muss über die Klasse geschrieben werden!

    Als nächstes schreibst Du Dir eine Variable sonst gibt es eine Fehlermeldung z.B.:

    Quellcode

    1. var delegate: sendData?

    Mit einem Button ( @IBAction) kannst Du die Daten dann übergeben.

    Im Viewport der die Daten empfangen soll, musst Du dann in der Klasse den Delegate angeben...


    Quellcode

    1. class: DeineKlasse: UiViewController, sendData,....