2017-10-23 4 views
0

Screesnshotanzeigen möchten einen Text nach ausgewählten Werten von picker

ich, nachdem der Benutzer ausgewählte Werte aus beiden pickerViews einen Text im Viewcontroller erhalten.

Eine Berechnung wird nicht benötigt.

Sagen wir zum Beispiel: Ich klicke auf den ersten Picker auf "25 Jahre" und im zweiten wähle ich "50 Euro". Jetzt brauche ich den Text unter den TextFields.

import UIKit 

class ViewController3Rechner: UIViewController, UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource { 
    @IBOutlet weak var LaufZeitText: UITextField! 
    @IBOutlet weak var BeitragText: UITextField! 

    var Laufzeit = ["10 Jahre", "15 Jahre", "20 Jahre", "25 Jahre", "30 Jahre", "35 Jahre", "40 Jahre"] 
    var Beitrag = ["50 Euro", "75 Euro", "100 Euro", "125 Euro", "150 Euro", "175 Euro", "200 Euro", "250 Euro", "300 Euro"] 

    let picker = UIPickerView() 
    let beitrag = UIPickerView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     picker.delegate = self 
     picker.dataSource = self 
     beitrag.delegate = self 
     beitrag.dataSource = self 

     // binding textfield to picker 
     LaufZeitText.inputView = picker 
     BeitragText.inputView = beitrag 
    } 

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     var countrows : Int = Laufzeit.count 
     if pickerView == beitrag { 
      countrows = self.Beitrag.count 
     } 

     return countrows 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     if pickerView == picker { 
      let titleRow = Laufzeit[row] 
      return titleRow 
     } else if pickerView == beitrag { 
      let titleRow = Beitrag[row] 
      return titleRow 
     } 

     return "" 
    } 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     if pickerView == picker { 
      self.LaufZeitText.text = self.Laufzeit[row] 

      self.view.endEditing(true) 

     } else if pickerView == beitrag { 
      self.BeitragText.text = self.Beitrag[row] 

      self.view.endEditing(true) 
     } 
    } 
} 
+0

Wie sieht Ihr Code bisher aus? – Annjawn

+0

oh sorry: bearbeitet –

Antwort

0

Ihr aktueller Code sollte bereits ermöglichen, dass jedes Textfeld einzeln ausgefüllt wird, wenn eine Zeile in Ihren Auswahlansichten ausgewählt wird.

Von dem, was ich in Ihrer Frage verstehen kann, möchten Sie BEIDE nur ausfüllen, WENN beide Pflücker eine Reihe ausgewählt hatten.

Erstellen Sie zwei neue String Variablen, laufZeit und beitrag

var laufZeit: String? 
var beitrag: String? 

diese Zeichenfolgen in Ihrer pickerView(_ pickerView: UIPickerView, didSelectRow Funktion einstellen, die Einstellung auf der Eigenschaft Textfelder Text ersetzen.

if pickerView == picker { 
    laufZeit = self.Laufzeit[row] 

    self.view.endEditing(true) 

} else if pickerView == beitrag { 
    beitrag = self.Beitrag[row] 

    self.view.endEditing(true) 
} 

Es gibt zwei Möglichkeiten, wie Sie diesen nächsten Schritt tun, entweder innerhalb der didSet jedes der neuen String Variablen oder knapp unterhalb der oben if/else-Anweisungen.

So oder so werden Sie es so etwas wie dies aussehen soll:

if let laufZeitString = laufZeit, let beitragString = beitrag { 
    self.LaufZeitText.text = laufZeitString 
    self.BeitragText.text = beitragString 
} 

Also, wenn beide Variablen gesetzt sind, dann werden beide Textfelder besiedelten bekommen. Ich würde das in seine eigene Funktion werfen, vielleicht populateTextFields().

Verwandte Themen