用于多 UITextField 的 UIPickerView
UIPickerView for Multi UITextField
我试图在一个视图中的每个文本字段中显示 UIPickerView
。当我在第一个文本字段中选择值时,它强制第二个文本字段显示相同的值。
我正在尝试为每个设置不同的值。
@IBOutlet var gpaFieldOne: UITextField!
@IBOutlet var gpaFieldTwo: UITextField!
@IBOutlet var gpaResult: UILabel!
let picker = UIPickerView()
var grades = ["A","B","C","D","F"]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return grades.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return grades[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
gpaFieldOne.text = grades[row]
self.view.endEditing(false)
gpaFieldTwo.text = grades[row]
self.view.endEditing(false)
}
override func viewDidLoad() {
super.viewDidLoad()
picker.delegate = self
picker.dataSource = self
gpaFieldOne.inputView = picker
gpaFieldTwo.inputView = picker
}
您的 didSelectRow
每次都设置两个文本字段。您只需要设置当前文本字段的 text
,而不是两者。
您需要进行一些更改以跟踪当前文本字段。
首先添加一个新的 属性:
var currentTextField: UITextField?
确保设置两个文本字段的委托。在故事板中建立联系或在代码中设置它们(在 viewDidLoad
中)。
实施textFieldDidBeginEditing
方法:
func textFieldDidBeginEditing(_ textField: UITextField) {
currentTextField = textField
}
现在将您的 didSelectRow
更新为以下内容:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if let currentTextField = currentTextField {
currentTextField.text = grades[row]
currentTextField.resignFirstResponder()
self.currentTextField = nil
}
}
我试图在一个视图中的每个文本字段中显示 UIPickerView
。当我在第一个文本字段中选择值时,它强制第二个文本字段显示相同的值。
我正在尝试为每个设置不同的值。
@IBOutlet var gpaFieldOne: UITextField!
@IBOutlet var gpaFieldTwo: UITextField!
@IBOutlet var gpaResult: UILabel!
let picker = UIPickerView()
var grades = ["A","B","C","D","F"]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return grades.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return grades[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
gpaFieldOne.text = grades[row]
self.view.endEditing(false)
gpaFieldTwo.text = grades[row]
self.view.endEditing(false)
}
override func viewDidLoad() {
super.viewDidLoad()
picker.delegate = self
picker.dataSource = self
gpaFieldOne.inputView = picker
gpaFieldTwo.inputView = picker
}
您的 didSelectRow
每次都设置两个文本字段。您只需要设置当前文本字段的 text
,而不是两者。
您需要进行一些更改以跟踪当前文本字段。
首先添加一个新的 属性:
var currentTextField: UITextField?
确保设置两个文本字段的委托。在故事板中建立联系或在代码中设置它们(在 viewDidLoad
中)。
实施textFieldDidBeginEditing
方法:
func textFieldDidBeginEditing(_ textField: UITextField) {
currentTextField = textField
}
现在将您的 didSelectRow
更新为以下内容:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if let currentTextField = currentTextField {
currentTextField.text = grades[row]
currentTextField.resignFirstResponder()
self.currentTextField = nil
}
}