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

标签 ios swift uipickerview

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

相关文章:

ios - 您将如何以及在何处使用 instantiateViewControllerWithIdentifier

ios - NSKeyedArchiver 不存档我的 Codable 类

swift - 如何在 Swift 中的同一 x 行中显示所有条目 y 值?

ios - didSelectItemAtIndexPath 未在同一屏幕上使用多个 Collection View 调用

ios - 隐藏导航栏时如何启用滑动手势?

ios - UIPickerView 不重用以前的组件 View

iphone - 如何像其他应用程序(如 Viber、Whatsapp...)一样快速阅读地址簿

ios - Realm 列表属性不保存数据

ios - 带有完成按钮的 UIPickerView 不起作用

IOS7 UIPickerView如何隐藏选择指示符