gpt4 book ai didi

ios - 在同一 View ViewController 上添加第二个 UIPickerView 时出现问题

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

本质上,我只是想向我的 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/

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