在同一视图中集成多个选择器视图时遇到问题

Having trouble integrating multiple pickerviews in the same view

我想在一个视图上设置两个选择器视图,但我不想显示轮子,我只想在单击特定文本框时弹出轮子。我可以让它在一个 Pickerview 上工作,但是当我尝试添加第二个时,pickerview 不再工作。

我试过使用 "tags" 但由于我没有明确使用 UIPickerView!,我不认为我不能使用标签。

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate{

    @IBOutlet weak var cornerText: UITextField!
    @IBOutlet weak var brandText: UITextField!


    //    PICKER VIEW CODE

    let Corner = ["LF", "RF", "RR", "LR", "5th"]
    let Brand = ["Brand1", "Brand2", "Brand3", "Brand4", "Brand5"]


    func numberOfComponents(in cornerPickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ cornerPickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if cornerText.isEditing{
            return Corner.count
        }
        else if brandText.isEditing{
            return Brand.count
        }
        else {
            return 0
        }
    }

    func pickerView(_ cornerPickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if cornerText.isEditing{
            return Corner[row]
        }
        else if brandText.isEditing{
            return Brand[row]
        }
        else {
            return nil
        }
    }
    var cornerIndex: Int!
    var brandIndex: Int!

    func pickerView(_ cornerPickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if cornerText.isEditing{
            cornerText.text = Corner[row]
            cornerIndex = row
        }
        else if brandText.isEditing{
            brandText.text = Brand[row]
            brandIndex = row
        }
        else{
            return
        }
    }

    func createPickerView(){


        if cornerText.isEditing{
            let cornerPickerView = UIPickerView()
            cornerPickerView.delegate = self
            cornerText.inputView = cornerPickerView
        }
        else if brandText.isEditing{
            let cornerPickerView = UIPickerView()
            cornerPickerView.delegate = self
            brandText.inputView = cornerPickerView
        }
        else {
            return
        }
    }

    func dismissPickerView(){
        let toolBar = UIToolbar()
        toolBar.sizeToFit()

        let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.dismissKeyboard))
        toolBar.setItems([doneButton], animated: false)
        toolBar.isUserInteractionEnabled = true
        if cornerText.isSelected{
            cornerText.inputAccessoryView = toolBar
        }
        else {
            brandText.inputAccessoryView = toolBar
        }
    }

    @objc func dismissKeyboard(){
        view.endEditing(true)
        //   Put anything that must pop up based on the corner here

我希望两个 pickerview 都能工作,现在 pickerview 都没有显示。

您的选择器视图数据 source/delegate 代码看起来没问题。问题似乎在于您如何为每个文本字段创建和设置输入视图和输入附件视图。

您只需要一个选择器视图和一个标签栏。将每个分配给两个文本字段。

移除您的 dismissPickerView 方法并更新您的 createPickerView 方法,如下所示:

func createPickerView() {
    let pickerView = UIPickerView()
    pickerView.delegate = self
    pickerView.dataSource = self

    cornerText.inputView = pickerView
    brandText.inputView = pickerView

    let toolBar = UIToolbar()
    let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.dismissKeyboard))
    toolBar.setItems([doneButton], animated: false)

    cornerText.inputAccessoryView = toolBar
    brandText.inputAccessoryView = toolBar
}

由于两个文本字段共享相同的选择器视图,因此每次文本字段开始编辑时您都需要重新加载选择器视图。实施 textFieldDidBeginEditing 委托方法,访问选择器视图并重新加载它。