从pickerView中选择值后显示文本

时间:2017-10-23 22:53:38

标签: ios swift uipickerview

Screesnshot

我希望在用户从两个pickerViews中选择值后,在viewController中获取文本。

不需要计算。

让我们举个例子:我点击第一个选择器" 25 Jahre"在第二天我选择了#50; 50欧元"。现在我需要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)
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的当前代码应该已经允许在选择器视图中选择行时单独填充每个文本字段。

从我在你的问题中可以理解的情况来看,只有当两个选择者都选择了一行时,你才想要同时填写。

创建两个新的String变量,laufZeitbeitrag

var laufZeit: String?
var beitrag: String?

pickerView(_ pickerView: UIPickerView, didSelectRow函数中设置这些字符串,替换textFields文本属性上的设置。

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

    self.view.endEditing(true)

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

    self.view.endEditing(true)
}

有两种方法可以执行下一步操作,可以在每个新didSet变量的String内,也可以在上面的if / else语句下面。

无论哪种方式,你都希望它看起来像这样:

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

因此,如果设置了两个变量,则将填充两个文本字段。我把它扔进了自己的函数,也许是populateTextFields()