如何在 iOS 中连接 pickerviews 和标签?
How to connect pickerviews and labels in iOS?
我的 ViewController
上有两个 pickerView
和两个 Label
。
问题是如何将 label
s 连接到 pickerView
的数据数组(字符串类型)并显示在 label
s 选择的 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]
}
}
我的 ViewController
上有两个 pickerView
和两个 Label
。
问题是如何将 label
s 连接到 pickerView
的数据数组(字符串类型)并显示在 label
s 选择的 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]
}
}