我试图在两个不同的文本框上使用两个选取器视图(我将它们对齐在文本框下方并隐藏它们直到被调用(。 我隐藏选取器视图,直到我准备好使用并将两个文本框绑定到相应的文本框。 第一个选择器视图工作正常,但是当我单击第二个时,我的列表没有出现,它似乎仍然隐藏。 我已经多次阅读代码,但找不到问题,并且观看了多个视频并检查了苹果文档无济于事。 下面发布的代码以供查看和帮助。 提前感谢!
class fifthViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {
@IBOutlet weak var heightInput: UITextField!
@IBOutlet weak var weightInput: UITextField!
@IBOutlet weak var bmiOutput: UITextField!
@IBOutlet weak var weightPicker: UIPickerView!
@IBOutlet weak var heightPicker: UIPickerView!
var height = ["48", "49", "50"]
var weight = ["90", "91", "92"]
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
var countrows : Int = height.count
if pickerView == weightPicker {
countrows = self.weight.count
}
return countrows
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == heightPicker {
let titleRow = height[row]
return titleRow
}
else if pickerView == weightPicker {
let titleRow = weight[row]
return titleRow
}
return ""
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == heightPicker {
self.heightInput.text = self.height[row]
self.heightPicker.isHidden = true
}
else if pickerView == weightPicker {
self.weightInput.text = self.weight[row]
self.weightPicker.isHidden = true
}
}
func textFieldDidBeginEditing(_ textField: UITextField) {
if (textField == self.heightInput) {
self.heightPicker.isHidden = false
}
else if (textField == self.weightInput) {
self.weightInput.isHidden = false
}
}```
在 textFieldDidBeginEditing()
中,您需要将self.weightPicker.isHidden
设置为 false
而不是 self.weightInput.isHidden
。
func textFieldDidBeginEditing(_ textField: UITextField) {
if (textField == self.heightInput) {
self.heightPicker.isHidden = false
}
else if (textField == self.weightInput) {
self.weightPicker.isHidden = false
}
}
修改代码以使用 inputView
我同意@PaulW11的评论:
"如果你制作了选择器视图,你几乎肯定会更好 每个文本字段的输入视图。
以下是基本设置所需的更改。 摆脱情节提要中的选取器并断开@IBOutlet
连接。
然后添加这些修改:
// These are no longer outlets since they're created in code
var weightPicker: UIPickerView!
var heightPicker: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
// set up the picker views
self.weightPicker = UIPickerView()
self.weightPicker.delegate = self
self.weightPicker.dataSource = self
self.heightPicker = UIPickerView()
self.heightPicker.delegate = self
self.heightPicker.dataSource = self
self.heightInput.inputView = self.heightPicker
self.weightInput.inputView = self.weightPicker
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == heightPicker {
self.heightInput.text = self.height[row]
// make picker go away after value has been selected
self.heightInput.resignFirstResponder()
}
else if pickerView == weightPicker {
self.weightInput.text = self.weight[row]
// make picker go away after value has been selected
self.weightInput.resignFirstResponder()
}
}