gpt4 book ai didi

ios - 使用两个 UIPickerView 时出现问题 - 第一个世界,第二个世界没有

转载 作者:行者123 更新时间:2023-11-29 05:40:26 25 4
gpt4 key购买 nike

我尝试在两个不同的文本框上使用两个选择器 View (我将它们对齐在文本框下方并隐藏它们直到被调用)。我隐藏选取器 View ,直到准备好使用并将两个文本框绑定(bind)到相应的文本框。第一个选择器 View 工作正常,但是当我单击第二个选择器 View 时,我的列表没有出现,并且它似乎仍然隐藏。我已经多次阅读代码,但找不到问题,并且观看了多个视频并检查了苹果文档,但无济于事。下面发布了代码以供审核和帮助。提前致谢!

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
}
}
<小时/>

修改代码以使用 inputViews

我同意@PaulW11的评论:

"You would be almost certainly better off if you made the picker views the inputView of each text field."

以下是基本设置所需的更改。删除 Storyboard 中的选择器并断开 @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()
}
}

关于ios - 使用两个 UIPickerView 时出现问题 - 第一个世界,第二个世界没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56609969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com