如何在 iOS 中连接 pickerviews 和标签?

How to connect pickerviews and labels in iOS?

我的 ViewController 上有两个 pickerView 和两个 Label

问题是如何将 labels 连接到 pickerView 的数据数组(字符串类型)并显示在 labels 选择的 pickerView 单元格中?

@IBOutlet weak var valuetype1: UILabel!

    var pickerData: [String] = [String]()


 override func viewDidLoad() {
        super.viewDidLoad()

        self.picker1.delegate = self
        self.picker1.dataSource = self
        self.picker2.delegate = self
        self.picker2.dataSource = self

        pickerData = ["Годы", "Месяцы", "Недели", "Дни", "Часы", "Минуты"]
}

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


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


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

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    valuetype1.text = pickerData[row]
    valuetype2.text = pickerData[row]
}

你怎么能看到我将标签 (valuetype(1..2)) 连接到 pickerData 但它总是在两个 label 中显示一个字符串。我需要在第一个 label 中显示在 pickerView1 中选择的字符串,在第二个 label 中显示另一个字符串,在 pickerView2.

中选择

UIPickerViewDelegate 有一个名为 pickerView(_:didSelectRow:inComponent:) 的方法。将此方法添加到您的 VC class。只要用户选择一行,就会调用此方法。

您的实施应该与此类似。

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    valuetype1.text = pickerData[row]
}

有关更多信息,请参阅苹果文档:https://developer.apple.com/documentation/uikit/uipickerviewdelegate/1614371-pickerview

编辑:

当您使用同一个控制器作为多个 UIPickerView 的委托时,您可以通过比较 pickerView(_:didSelectRow:inComponent:) 方法的 pickerView 参数来检查哪个选择器视图触发了方法调用。

试试这个:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == picker1 {
        valuetype1.text = pickerData[row]
    } else if pickerView == picker2 {
        valuetype2.text = pickerData[row]
    }
}