选择新的 UITextField 时更新 UIPickerView 行

Update UIPickerView rows when selecting new UITextField

我创建了一个 pickerView,它使用 3 个不同的数组来填充 3 个文本字段,但是当我点击一个文本字段,select 一行,然后直接点击另一个文本字段时,我的 pickerView 没有更新信息在该文本字段的数组中。

如果我点击一个文本字段,然后点击离开以关闭选择器视图,然后点击另一个文本字段,它会更新并正常工作。

var teams = [String]()
var schedules = ["A","B"]
var services = ["9AM","12PM","5PM"]
var pickerView:UIPickerView!

    override func viewDidLoad() {
        super.viewDidLoad()

        pickerView.delegate = self
        pickerView.dataSource = self

        teamTextField.inputView = self.pickerView
        serviceTextField.inputView = self.pickerView
        scheduleTextField.inputView = self.pickerView
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if teamTextField.isFirstResponder() {
            return teams.count
        }
        else if scheduleTextField.isFirstResponder() {
            return schedules.count
        }
        else  {
            return services.count
        }

    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if teamTextField.isFirstResponder() {
            return teams[row]
        }
        else if scheduleTextField.isFirstResponder() {
            return schedules[row]
        }
        else {
            return services[row]
        }
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if teamTextField.isFirstResponder() {
            let itemSelected = teams[row]
            teamTextField.text = itemSelected
        }
        else if scheduleTextField.isFirstResponder() {
            let itemSelected = schedules[row]
            scheduleTextField.text = itemSelected
        }
        else if serviceTextField.isFirstResponder() {
            let itemSelected = services[row]
            serviceTextField.text = itemSelected
        }

    }

    func textFieldDidBeginEditing(textField: UITextField) {
        pickerView.reloadAllComponents()
    }

这应该是您需要的所有必要代码。如果您还需要什么,请告诉我。

尝试添加:

@IBAction func textFieldDidBeginEditing(sender: AnyObject) {
    pickerView.reloadAllComponents()
}

并将其连接到 UITextField 的

的 'Editing Did Begin' 已发送事件