本质上,我只是想向我的 ViewController 添加第二个 UIPickerView,但不明白为什么以下代码可以正常工作。
当选择第二个文本字段stopTextField时,我希望出现stopPicker UIPickerView,但出现的是相同的gradePicker UIPickerView。
它似乎编译得很好,但完全忽略了:
let stopPickerValues = ["What Stop?","Stop 1", "Stop 2", "Stop 3", "Stop 4", "Stop 5", "Stop 6", "Stop 7", "Stop 8", "Stop 9", "Stop 10"]
问题是什么?
代码如下:
import UIKit
class timeselectviewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var gradeTextField: UITextField!
@IBOutlet weak var stopTextField: UITextField!
var gradePicker: UIPickerView!
var stopPicker: UIPickerView!
let gradePickerValues = ["select approximate arrival time","8:00 am -12:00 pm", "12:00 pm - 4:00 pm", "4:00 pm - 8:00 pm"]
let stopPickerValues = ["What Stop?","Stop 1", "Stop 2", "Stop 3", "Stop 4", "Stop 5", "Stop 6", "Stop 7", "Stop 8", "Stop 9", "Stop 10"]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func numberOfComponents2(in pickerView2: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return gradePickerValues.count
}
func pickerView2(_ pickerView2: UIPickerView, numberOfRowsInComponent2 component2: Int) -> Int{
return stopPickerValues.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return gradePickerValues[row]
}
func pickerView2(_ pickerView2: UIPickerView, titleForRow2 row2: Int, forComponent2 component2: Int) -> String? {
return stopPickerValues[row2]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
gradeTextField.text = gradePickerValues[row]
self.view.endEditing(true)
}
func pickerView2(_ pickerView2: UIPickerView, didSelectRow2 row2: Int, inComponent2 component2: Int) {
stopTextField.text = stopPickerValues[row2]
self.view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()
gradePicker = UIPickerView()
stopPicker = UIPickerView()
gradePicker.dataSource = self
stopPicker.dataSource = self
gradePicker.delegate = self
stopPicker.delegate = self
stopTextField.inputView = stopPicker
gradeTextField.inputView = gradePicker
gradeTextField.text = gradePickerValues[0]
stopTextField.text = stopPickerValues[0]
}
}
最佳答案
你可以这样做:
var pickerView: UIPickerView!
...
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
if gradeTextField.isFirstResponder {
return gradePickerValues.count
} else {
return stopPickerValues.count
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if gradeTextField.isFirstResponder {
return gradePickerValues[row]
} else {
return stopPickerValues[row]
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if gradeTextField.isFirstResponder {
gradeTextField.text = gradePickerValues[row]
} else {
stopTextField.text = stopPickerValues[row]
}
self.view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()
pickerView = UIPickerView()
pickerView.dataSource = self
pickerView.delegate = self
stopTextField.inputView = pickerView
gradeTextField.inputView = pickerView
gradeTextField.text = gradePickerValues[0]
stopTextField.text = stopPickerValues[0]
}
问题是您的 pickerView2
方法被忽略了。这样我在上面发布的内容会检查哪个文本字段是执行所需操作或返回正确值的第一个响应者。
编辑
正如 rmaddy 所指出的,您只需要一个选择器 View ,因为一次只能有一个文本字段作为第一响应者。
关于ios - 在同一 View ViewController 上添加第二个 UIPickerView 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55787767/