2017-01-17 1 views
3

Ich arbeite an einem Projekt, das Ihre Punkte berechnet, die Sie für die Schule brauchen, nur indem Sie Ihre Note in allen Fächern schreiben.UIPickerView Senden von Daten ohne Übergang

Ich benutze diese UIPickerView für den Benutzer, um dem Programm zu sagen, was es ist. Dann speichere ich es in einer Variablen. Aber ich kann diese Variable nicht ohne Segue an einen anderen Viewcontroller senden, und ich möchte die Verwendung von Segues vermeiden. Wie gehe ich vor?

Das ist mein Viewcontroller für eine subjekt:

(Ein Teil davon ist auf Schwedisch)

import UIKit 

class Q_A_Religion: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 


@IBOutlet weak var label: UILabel! 
@IBOutlet weak var label2: UILabel! 
@IBOutlet weak var picker: UIPickerView! 


let A: Double = 20.0 
let B: Double = 17.5 
let C: Double = 15.0 
let D: Double = 12.5 
let E: Double = 10.0 
let F: Double = 0.0 



var totaltmeritvärdeIReligion: Double = 0 
//förvarar värdet av betyget som man skrivit in 

let betygsAltenativ = [" ","A", "B", "C", "D", "E", "F", "-"] 


public func numberOfComponents(in pickerView: UIPickerView) -> Int 
{ 
    return 1 
} 

public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
{ 
    return betygsAltenativ[row] 
} 

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
{ 
    return betygsAltenativ.count 
} 

public func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
{ 

    let BetygValt = betygsAltenativ[row] 
    label.text = betygsAltenativ[row] 


    switch (BetygValt) 

    { 


    case " ": 
     label2.text = (" ") 
     break 


    case "A": 
     label2.text = ("+ 20p") 
     totaltmeritvärdeIReligion = Double(A) 

    case "B": 
     label2.text = ("+ 17.5p") 
     totaltmeritvärdeIReligion = Double(B) 
    case "C": 
     label2.text = ("+ 15p") 
     totaltmeritvärdeIReligion = Double(C) 

    case "D": 
     label2.text = ("+ 12.5p") 
     totaltmeritvärdeIReligion = Double(D) 

    case "E": 
     label2.text = ("+ 10p") 
     totaltmeritvärdeIReligion = Double(E) 

    case "F": 
     label2.text = ("+ 0p") 
     totaltmeritvärdeIReligion = Double(F) 

    case "-": 
     label2.text = ("+ 0p") 


    default: 
     print("Inget betyg valt") 

    }//switch slutar 

    func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let nextVC: Totaltmeritva_rde = segue.destination as! Totaltmeritva_rde 

     nextVC.Religionbetygetskickat = totaltmeritvärdeIReligion 

    } 

}// func pickerView slutar 



}//Slutet av allt 

Antwort

2

Was bei der Verwendung von segues falsch ist? Dies ist die bevorzugte Methode, dies für eine Eltern-Kind-Beziehung zu tun. Andere Methoden sind:

  1. Übertragung eine Benachrichtigung mit NotificationCenter.default
  2. Verwenden Sie einen gemeinsam genutzten Datenspeicher oder Singleton die Werte Haus (Realm for instance)
  3. Wenn Sie die VC manuell ohne segue werden instanziiert wird, passieren Sie in die Daten nach dem Erstellen, aber bevor Sie es auf den Stapel schieben oder es zum Root-View-Controller machen.
+0

welches ist das beste in meinem fall? – theswed

+0

Sie haben bereits einen prepareForSegue drin. Funktioniert es nicht? Sollte es nicht Override sein? Rufen Sie performSegue auf oder wird es vom Storyboard ausgeführt? –

+0

Nun, ich versuchte, die Variable auszudrucken, die ich sendete, aber es würde funktionieren – theswed