您可以将pickerView 设置为textField.inputView。
以下示例适用于共享单个选取器视图的两个文本字段,但您可以通过在选取器视图委托方法中检查 activeTextField 的身份来轻松扩展它。
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var myTextFieldOne: UITextField!
@IBOutlet weak var myTextFieldTwo: UITextField!
let pickerDataOne = ["A", "B", "C", "D", "E", "F"]
let pickerDataTwo = ["1", "2", "3", "4", "5", "6"]
// Holds a reference to current text field
var activeTextField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
let myPicker = UIPickerView()
myPicker.delegate = self
myPicker.dataSource = self
myTextFieldOne.inputView = myPicker
myTextFieldTwo.inputView = myPicker
}
// MARK: UITextField Delegate
func textFieldDidBeginEditing(textField: UITextField!) {
// Sets tapped textField to active one
self.activeTextField = textField
if let picker = self.activeTextField.inputView as? UIPickerView {
// This is one way to get a reference to the picker view
picker.reloadAllComponents()
}
}
// MARK: UIPickerView Delegate
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
// You can have a different data source for each text field
if activeTextField === myTextFieldOne {
return pickerDataOne.count
} else if activeTextField === myTextFieldTwo {
return pickerDataTwo.count
}
}
func pickerView( _ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
// Gets the title for each row in picker
if activeTextField === myTextFieldOne {
return pickerDataOne[row]
} else if activeTextField === myTextFieldTwo {
return pickerDataTwo[row]
}
}
func pickerView( _ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
// Populates the text field
if activeTextField === myTextFieldOne {
myTextFieldOne.text = pickerDataOne[row]
} else if activeTextField === myTextFieldTwo {
myTextFieldTwo.text = pickerDataTwo[row]
}
}
}
然后,您可以通过获取myTextFieldOne.text 来访问任何文本字段中的文本。